试验五索引和数据完整性_第1页
试验五索引和数据完整性_第2页
试验五索引和数据完整性_第3页
试验五索引和数据完整性_第4页
试验五索引和数据完整性_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

实验五索引和数据完整性1、目的与要求(1)掌握索引的使用方法。(2)掌握数据完整性的实现方法。2、实验准备了解索引的作用与分类。掌握索引的创建方法。理解数据完整性的概念及分类。掌握各种数据完整性的实现方法。3、实验内容(1)建立索引。①使用CREATEINDEX语句创建索引。A、对YGGL数据库的Employees表中的Department©列建立索引。在“查询分析器”窗口中输入如下程序并执行。S-QLQueryl.sql-lo...dmiristrator(52))*IjseYGGL的臼口索弓Jidepart_ind臼口索弓Jidepart_ind怀监一r非曷、击j二工Emplw多傻与cnEmployees(DepartmentZD)B、在Employees表的Name列和Address列上建立复合索引。1EQLQu&ryl.sql-lo...dmini£trator(52))*|日createindexAD_intEQLQu&ryl.sql-lo...dmini£trator(52))*|日createindexAD_intLaiEmployees;Name,Address'击AD-int不度一「非聚羯去departjrd卬唯一r非良集),掘PK_EmployeesC、对Department表上的DepartmentName列建立唯一非聚集索引。IE)IE)口索W击口叩」rid(唯一非良匍PK_Departments展匐EcreateuniqueindexDep_indciDepartments(DepartmentName)【思考与练习】A、索引创建后在对象资源管理器中查看表的索引。上面分别创建了Employees表和Department表的索引,在对象资源管理器中的表中将相应的表打开,在“索引”中显示该表中建立的索引。详细结果如上面截图中显示。3、了解索引的分类情况。按索引的组织方式能够将索引分为聚集索引和非聚集索引两种类型。聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。非聚集索引完全独立于数据行的结构。C、使用CREATEINDEX语句能够创建主键吗?D、在什么情况下能够看到建立索引的好处?数据库索引是为了增加查询速度而对表字段附加的一种标识。数据库的索引并不是只有好处或者只有坏处的。当我们的数据库足够大,恰当的建立索引就会大大的提高查询搜索的速度;在这里举个反例,像查询性别这种大量重复的字段时候,是否建立索引是没有多大区别的;还有当表内数据不是很多的时候建立索引也是没有多大意义的,因为索引也是要占用资源的。但是当我们数据库非常大时候,经常进行GROUPBY查询时候,若将GROUPBY字段上建立索引就会很大程度上面较少查询搜索所花费的时间。②使用界面方式创建索引。使用界面方式在Employees表的PhoneNumber列上创建索引。启动SQLServerManagermentStudio,在对象资源管理器中展开数据库YGGL,展开表Employees,右击“索引”,选择“新建索引”选项。在新建索引的窗口中填写索引的名称和类型,单击“添加”按钮,在列框中选择要创建索引的列,选择完单击“确定”按钮即完成创建的工作。【思考与练习】A、使用界面方式创建一个复合索引。

TaiicatTaTr索弓I键列(K)添加(A)...排序顺序 数据类型 大小标识允许NULL值选择要添加副索引他的走列”上移01)表列g下移⑪)TaiicatTaTr索弓I键列(K)添加(A)...排序顺序 数据类型 大小标识允许NULL值选择要添加副索引他的走列”上移01)表列g下移⑪)司从(dbo.Employe^中辞列0回叵Birthdaydate乩i囹ETiplciyeelDCh:ii'(6)6告舌B:dinechdT(10)10否否物据出刑 字节标识先许Nl值B、在Employees表的设计窗口中选择Address歹U,右击选择“索弓1/键”菜单项,在新窗口中为Address创建一个唯一索引。C、创建一个数据量很大的新表,查看使用索引和不使用索引的区别。(2)重建索引。重建Employees表中的所有索引。SQLQuerylsql-lo...diniristrator(52B^」依YGGL宫口□alterindexALLciEmployeesr-ejjild【思考与练习】重建表Employees中EmployeelD列上的索引。f^0g,YGGL-dSQLQusryN同-除晦尸GGLfsa伊埒Xf^0g,YGGL-d-createindexEnploy_ind. onemployees^EmployeelD^--alterindexEnploy_indonemployeespebuil|d(3)删除索引。使用DROPINDEX语句删除表Employees上的索引depart_ind,使用如下T-SQL语句。ISQLQu&rylsql-iQ.ndiniriSitratQr 臼口案弓□drcjindexdepart^nd ±AD」nt不哇一「非民弱口1Employees 用PK_Employees黛嵬从上面截图中可以显示,之前在Employees表中创建的depart_ind索引已经被删除。

【思考与练习】A、使用DROPINDEX一次删除Employees表上的多个索弓I。KS3S..VGGL-db&.£alarySQLQueryZsql-KS3S..VGGL-db&.£alary1dropindexEmploy_indonEmployeesB、B、使用界面方式删除Department表上的索引。在数据库YGGL中的Department表中打开“索引”,找到表Department表上的索引Dep_ind,右键删除,在弹出的“删除对象”窗口中选择“确定”,删除索引Dep_ind。(4)数据完整性。①创建一个表Employees5,只含EmployeeID、Name、Sex和Education列。将Name设为aj惟gl+ux寻工共与习-aj惟gl+ux寻工共与习-U取也Lj至运WEi□db&OepartmerTfts£11_]dfao.ErriiplDyeesJducdEmpI口"一5E刁手」3EmployeeID(char(6Xncrtnul)¥iSldnie(P,<chArflD'i,notnuITl3Gew国ryi「上null)zduc-stiGn(chdr[4],rulDSQLQueryl.sql-lo...dmlnistrator(51^nr^eatetaole-niplcyees5(EriployesID charfG। not null[Jame charflQ) not nullprimarykeyjSex tinyintjEducation char(4)sconstraintUK_idunlque(EmployeeID)-)□□dbc.Employe□□dbc.Employees5

田仁「列田,」袈匕约束田U触发器门广1幸三I/SQLQueryl.sql■lo...dnninistrator(53))*ElaltertaoleEmplayeesS

drcjccistr-^intUK_idSG【思考与练习】A、使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命令。

SQLQueryZ.sql-m^,YGGL(saf56})*~-dbdSa山ryM -QLQu曰rylsql-EM^WVGLSQLQueryZ.sql-m^,YGGL(saf56})*I111213I1112131415FEmployeelDchar6:notnull.Namechar10notnul,Educationchar4:rotnull,Birthdaydatenotnul,SexbitnotnulldefaultWorkYeartinyintnull,Addr-essvapchar40)null,PhoneNumberchar12)null,DepaptmentlDchar3notnull!primarykeyEmployeelDjDepant^entlD':nconstraintED_UKuniqueEnployeelDjDepartmentlDB、使用ALTERTABLE语句为表Employees5添加一个新列Address,并未该列定义UNIQUE约束。2EaltertableEmployees^addAddressvarchar(㈣4constraintAD_UKunique^AddressC、使用界面方式为一个新表定义主键和UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIQUE约束。Ecneat^_^blestudentEcneat^_^blestudent号吗 zhar(6) notmull,性别 :-ur(2) notnullcheck(性别in「男,,女1))IQ dbc.stude-nt日」到国号码(charfft),netrull)_fl性典kh日「⑵.notnull)【思考与练习】向该表中插入数据,“性别”列插入“男”和“女”以外字符,查看会发生什么情况?晾聪,¥GGL-dbo.studentSQLQueryZ.sql-^.YGGL缶晾聪,¥GGL-dbo.studentEuseYGGL-insertintostudent[values「日日日日日「J南模拟用户不小心输入汉字错误:禹消里消息包;,注别一状态口,第2行DflSERr谐句与细CK约克tudent_tlgl]_44FF419k冲突◎谖冲变皮生于枪据库.呜M一表,而।叶Mentcolwrai性别.(语句已跨止。④创建新表Salary2表,结构与表Salary相同,但是表Salary2不允许OutCome大于InCome

列。SQLQuaryl+ql-loZalmiristrator(53})*^2D4-27.YGGL-dbc.EmplcyeesElcreatetaoleSalary2EmployeelCi 匚.1白广(6; not nulljInCome tIcat not null-Outcome tIcat not nullc-iec<I'InCome>OutCome)L1日二dbc.Salary2日口列国Employee.C(char(61notnull)=1;nCnull)TOutcome^loat,retnull)【思考与练习】A、向表中插入数据,查看Outcome比InCome大时会发生什么情况?SQLQweryS.sql-Administrator(53))*204-27.YGGL-dbo.Salar7SjseYGGLgc日insertLiteSalary?values,000001',100,200;在“查询分析器”中输入上面截图中的代码,执行后出现下面这样的错误。□消息消息三47,一利电状态3第二行INSZ?T语句与3HZ3F约束y产_3三猫—第冲突■该冲突发生于娄!据库号L'表11dbo.京二三二K、1°语勺已终止.原因:在创建表Salary2的时候,规定了InCome大于Outcome,如果输入的数据不满足这样的条件,那么就会出现错误与规定冲突。B、创建表Employees6表,只考虑“学号”和“出生日期”两列,出生日期必须晚于980年1月1日。£QLQuery2,sql-To^.dmiristrater(53))*204-27.YGGL-dbo.SslaryS2CIScreatetaolsEmployees6EnployeelD ciar6)notnull,Birthday date notnulljz-iez<(Birthday>>1980-l-l')在“查询分析器”中输入上面的代码,在下面的结果栏中发现命令已经执行。日Udbo.Employeesfi日口更PIEmployeeT[char(6J,netnullJ氯Sirthday(date,notnull)⑤对YGGL数据库中Employees表进行修改,增加“DepartmentID”字段的CHECK约束。在“查询分析器”窗口中输入下面程序并执行:SQLQueryZiql-IcZciministrator(53))*]^204-27.YGGL-dbo.Salary2204-27.YGGL-dbo.EmployejseYGGLgc臼3ItertdjleEmplayeesaddconstraintdepartcheck(DepartmentID>1andD@partmentID<5)执行上面的代码,但是出现了这样的问题。,日月冲,”引1M之,吊-i丁AL7ZR语句与西二式约束Fe:芭EL冲突口该冲突发生于数据库”丫生1'表”好中.E皿1*f三1CDlUJim'席片5"打二工CZ【思考与练习】测试CHECK约束的有效性。在Employees表中进行增加修改,设置Check约束,使得DepartmentID在1—5之间。5-QLQuery2,iql-IcZ.dministrator(53))*^204-27.YGGL-dbo.Salary2204-27.YGGL-dbo.EmployejseYGGL§c□^ItertajleEmployeesaddconstraintdepartcheck(DepartmentID>1andDepartmentID<5)如上面T-SQL命令所示,向表Employees中插入数据时,在结果栏中显示了check约束提示错误:.门且”-,殖为二柱之二弟-i丁ALJZkTA3LZ语句与CET常约束F4己rL冲突口该冲突发生于钻据库”丫白打“;■表”近:。工叩1=一三二CDlwm'Cepartrte^^ID'a从上面的T-SQL命令和结果栏中消息提示可以得出,该CHECK约束有效。⑥创建一个规则对象,用限制输入到该规则所绑定的列中的值只能是该规则中列出的值。EQLQueryS.sql-lo...dmini£trator(53)F^204-27.¥GGL-dbo.Salary2204-27.YGGL-cIScreaterulelistruleL6@1正七财务部:研发部:人力资源部:销苣部i)斜execsp_bind<-ule'Li5^^ule''Departments.Depa"tiwentNaiiie'的在“查询分析器”中输入上面截图中的代码,显示规则已经绑定。二T消息消息丁一入级别W状态力过程中―第I行数据库中已存在名为'-的对象。已将粉则绑定到表的列口【思考与练习】A、建立一个规则对象,限制值在0〜20,然后把它绑定到Employees表的WorkYear字段上。SQLQusryl.sql-陈腻VGGL[力(54})*X[-createruletime_ruleas@timelike'[0-2][0-9],go[-execsp_bindrule'time_rule''Employees.WorkYear'go|B、删除上述建立的规则对象名。&QLQu&ryl.sql-陈聪,VGGL[sa(54)产X-execsp_unbindrule'Employees.WorkYear'execsp_unbindrule'time_rule'godropruletimerul5l⑦创建表Salary3,要求所有表Salary3上EmployeelD列的值都要出现在表Salary中,利用参照完整性约束实现,要求当删除或修改Salary表上的EmployeelD列时,Salary3表中的EmployeelD值也会随之变化。使用T-SQL语句:EQLqufrry2.sql-lo^.dmihistrator(53))*^204-27.YGGL-dbo.Salary2204-27YGGL-dbc臼zr-eateta^leSalaryB2iriii\aryy史y』EmployeelD □lar2iriii\aryy史y』InCome tloat not nulljOutCome rlcat not nulljforeignEmployeelD)reterentesSalary(EmployeelD;cnupdatezaszadecndeletecascade执行上面截图中的命令,表Salary3已经成功建好。日_Jdbc.Salary3I日Ci列,EmployeelD(PK,FK,charf&lnetru国ZnComei/loat,notnull)flOutcome(■loat,retnull)【思考与练习】A、创建表Salary3后,初始化该表的数据与Salary表相同。删除Salary表中一行数据,在查看表Salary3中内容,看看会发生什么?

SQLQuery1.sql-陈聪,VGGLRa(54))*X|Ecre-atetableSalary3IEmployeelDchar6notnullprimarykey.Intonefloatnotnull,OutComefloat.S;notnulljforeignkey.Employ白白工「:referencesSalaryJEnployeelD)onupdatecascadeondeletecascade)在左侧对

温馨提示

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

评论

0/150

提交评论