数据库实验工作报告总结多篇_第1页
数据库实验工作报告总结多篇_第2页
数据库实验工作报告总结多篇_第3页
数据库实验工作报告总结多篇_第4页
数据库实验工作报告总结多篇_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库实验工作报告总结多篇

试验内容

1、数据表的建立

基本表《简洁的》带有主键

带有外码约束的(外码来自其他表或者本表)

2、数据表的修改

添加删除列

修改列属性类型

添加删除约束(约束名)

元组的添加,修改,删除

删除数据表

试验过程

1、createtablestudent

(

snochar(9)primarykey,/*sno是主码列级完整性约束条件*/

snamechar(20)unique,/*sname取唯一值*/

ssexchar(2),

sagesmallint,/*类型为smallint*/

sdeptchar(20)/*所在系*/

);

createtablecourse

(

cnochar(4)primarykey,/*列级完整性约束条件,cno是主码*/

cnamechar(40),

cpnochar(4),/*cpno的含义是先行课*/

ccreditsmallint,

foreignkey(cpno)referencescourse(cno)

/*表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno*/

);

createtablesc

(

snochar(9),

cnochar(4),

gradesmallint,

primarykey(sno,cno),

/*主码有两个属性构成,必需作为表级完整性进行定义*/

foreignkey(sno)referencesstudent(sno),

/*表级完整性约束条件,sno是外码,被参照表是student*/

foreignkey(cno)referencescourse(cno),

/*表级完整性约束条件,cno是外码,被参照表示course*/

);

例1、createtables

(

cnovarchar(3),/*变长的字符串,输入2个字符就是两个字符不会补空格*/

snamevarchar(20),

statusint,

cityvarchar(20),

constraintpk_snoprimarykey(sno),/*约束条件的名字为pk_sno*/

);

createtablep

(

pnovarchar(3),

pnamevarchar(20),

colorvarchar(3),

weightint,

constraintpk_pnoprimarykey(pno),/*约束条件的名字是pk_pno*/

);

createtablej

(

jnovarchar(3),

jnamevarchar(20),

cityvarchar(20),

constraintpk_jnoprimarykey(jno)/*约束条件的名字为pk_jno*/

);

例2、createtablespj

(

snovarchar(3),/*第一个表中的主码*/

pnovarchar(3),

jnovarchar(3),

qtyint,/*数量*/

constraintpk_spjprimarykey(sno,pno,jno),/*主码由3个属性组成*/

foreignkey(sno)referencess(sno),

/*表级完整性约束条件,sno是外码,被参照表是s*/

foreignkey(pno)referencesp(pno),

/*表级完整性约束条件,pno是外码,被参照表是p*/

foreignkey(jno)referencesj(jno),

/*表级完整性约束条件,jno是外码,被参照表是j*/

);

2、数据表的更改

在s表中添加一个concat列

altertablesaddconcatvarchar(20)

在s表中删除concat列

altertablesdropcolumnconcat

更改s表concat列的属性把长度由20改为30

altertablesaltercolumnconcatvarchar(30)

联系方式名字为concat修改属性为唯一的属性名为con_concat

altertablesaddconstraintcon_concatunique(concat)

删除约束关系con_concat

altertablesdropconstraintcon_concat

/*插入一个元组*/

insertintosvalus(‘s1’,’精益’,20,’天津’)/*20不能写成’20’*/

试验中的问题的排解与总结:

1、在创建spj时

有三个实体所以从3个实体中取主码,还有一个数量属性也要写上

主码由那3个主码确定

2、更改一个数据库中数据表时肯定要先使该数据库处于正在使用状态

3、constraint

是可选关键字,表示primarykey、notnull、unique、foreignkey或check约束定义的开头。约束是特别属性,用于强制数据完整性并可以为表及其列创建索引。

4、--go可以不加但是要留意挨次注:go--解释提示错误

5、留意添加一个空元素用null

附sql备份

--创建一个数据库student

createdatabasestudent

go

--在数据库student中创建表studentcoursesc留意挨次

usestudent

----------------------------------------------------------------

createtablestudent

(

snochar(9)primarykey,/*sno是主码列级完整性约束条件*/

snamechar(10)unique,/*sname取唯一值*/

ssexchar(2),

sagesmallint,/*类型为smallint*/

sdeptchar(20)/*所在系*/

);/*;要加*/

-----------

数据库试验总结【二】

我在sqlserver索引基础学问系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。

对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到肯定数量级后才会作这个操作。这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。

区是管理空间的基本单位。一个区是八个物理上连续的页(即64kb)。这意味着sqlserver数据库中每mb有16个区。

为了使空间安排更有效,sqlserver不会将全部区安排给包含少量数据的表。sqlserver有两种类型的区:

统一区,由单个对象全部。区中的全部8页只能由所属对象使用。

混合区,最多可由八个对象共享。区中八页的每页可由不同的对象全部。

通常从混合区向新表或索引安排页。当表或索引增长到8页时,将变成使用统一区进行后续安排。假如对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的全部安排都使用统一区进行。

为何会这样呢?

其实很简洁:

读或写8kb的时间与读或写64kb的时间几乎相同。

在8kb到64kb范围之内,单个磁盘i/o传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。

因此,从数学上来讲,当需要传输64kb以上的sql数据时,

尽可能地执行64kb磁盘传输是有益的,即分成数个64k的操作。

由于64kb传输基本上与8kb传输一样快,而每次传输的sqlserver数据是8kb传输的'8倍。

我们通过一个实例来看有and操作符时候的最常见的一种状况。我们有下面一个表,

createtable[dbo].[member]([member_no][dbo].[numeric_id]identity(1,1)notnull,[lastname][dbo].[shortstring]notnull,[firstname][dbo].[shortstring]notnull,[middleinitial][dbo].[letter]null,[street][dbo].[shortstring]notnull,[city][dbo].[shortstring]notnull,[state_prov][dbo].[statecode]notnull,[country][dbo].[countrycode]notnull,[mail_code][dbo].[mailcode]notnull,[phone_no][dbo].[phonenumber]null,[photograph][image]null,[issue_dt][datetime]notnulldefault(getdate()),[expr_dt][datetime]notnulldefault(dateadd(year,1,getdate())),[region_no][dbo].[numeric_id]notnull,[corp_no][dbo].[numeric_id]null,[Pv_balance][money]nulldefault(0),[curr_balance][money]nulldefault(0),[member_code][dbo].[status_code]notnulldefault())

这个表具备下面的四个索引:

索引名细节索引的列

member_corporation_linknonclusteredlocatedonprimarycorp_no

member_identclustered,unique,primarykeylocatedonprimarymember_no

member_region_linknonclusteredlocatedonprimaryregion_no

memberfirstnamenonclusteredlocatedonprimaryfirstname

当我们执行下面的sql查询时候,

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwherem.firstnamelikek%andm.region_no6andm.member_no5000go

sqlserver会依据索引方式,优化成下面方式来执行。

selecta.member_no,a.firstname,b.region_nofrom(selectm.member_no,m.firstnamefromdbo.memberasmwherem.firstnamelikek%andm.member_no5000)a,--这个查询可以直接使用memberfirstname非聚集索引,而且这个非聚集索引掩盖了全部查询列--实际执行时,只需要规律读取3次

(selectm.member_no,m.region_nofromdbo.memberasmwherem.region_no6)b

--这个查询可以直接使用member_region_link非聚集索引,而且这个非聚集索引掩盖了全部查询列--实际执行时,只需要规律读取10次

wherea.member_no=b.member_no

不信,你可以看这两个sql的执行方案,以及规律读信息,都是一样的。

其实上面的sql,假如优化成下面的方式,实际的规律读消耗也是一样的。为何sqlserver不会优化成下面的方式。是由于and操作符优化的另外一个原则。

1/26的数据和1/6的数据找交集的速度要比1/52的数据和1/3的数据找交集速度要慢。

selecta.member_no,a.firstname,b.region_nofrom(selectm.member_no,m.firstnamefromdbo.memberasmwherem.firstnamelikek%--1/26数据)a,

(selectm.member_no,m.region_nofromdbo.memberasmwherem.region_no6andm.member_no5000--1/3*1/2数据)bwherea.member_no=b.member_no

当然,我们要学习sql如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。

比如下面的查询语句

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(0))wherem.firstnamelikek%andm.region_no6andm.member_no5000go

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(1))wherem.firstnamelikek%andm.region_no6andm.member_no5000goselectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(membercovering3))wherem.firstnamelikek%andm.region_no6andm.member_no5000goselectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(memberfirstname,member_region_link))wherem.firstnamelikek%andm.region_no6andm.member_no5000go

这里index计算符可以是0,1,指定的一个或者多个索引名字。对于0,1的意义如下:

假如存在聚集索引,则index(0)强制执行聚集索引扫描,index(1)强制执行聚集索引扫描或查找(使用性能最高的一种)。

假如不存在聚集索引,则index(0)强制执行表扫描,index(1)被解释为错误。

总结学问点:

简洁来说,我们可以这么理解:sqlserver对于每一条查询语句。会依据实际索引状况(sysindexes系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的方案。

成本代价计算的一个主要组成部分是规律i/o的数量,特殊是对于单表的查询。

and操作要满意全部条件,这样,常常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节约成本。

的项目中,竟然消失了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个特别大的失误。这篇博客就是从这个角度来排列索引的基础学问。

使用索引的意义

索引在数据库中的作用类似于名目在书籍中的作用,用来提高查找信息的速度。

使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

使用索引的代价

索引需要占用数据表以外的物理存储空间。

创建索引和维护索引要花费肯定的时间。

当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

创建索引的列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论