实验八:数据库的完整性约束一、实验目的1.掌握主键约束、外键约束及及check约束的用法;2.掌握默认值约束的应用。二、实验环境已安装SQLServer2008企业版的计算机;具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.熟悉数据库完整性相关概念及约束;2.了解约束、默认值;3.完成实验报告;五、实验准备知识1、创建primarykey约束(1)在创建数据表时创建primarykey约束CREATETABLEtable_name(column_namedata_type[PRIMARYKEY|unique|NOTNULL][,column_namedata_type[PRIMARYKEY|unique|NOTNULL]...[PRIMARYKEY(column[,...n])])(2)在修改表时同时创建primarykey约束ALTERTABLEtable_nameADDprimarykey(column[,...n])2、创建Foreignkey约束(1)创建表时同时定义Foreignkey约束CREATETABLEtable_name(column_namedata_type[FOREIGNKEY]REFERNCESref_table(ref_column)[,column_namedata_type[FOREIGNKEY]REFERNCESref_table(ref_column)...[FOREIGNKEY](column)REFERNCESref_table(ref_column))(2)通过修改表定义Foreignkey约束ALTERTABLEtable_nameADD[FOREIGNKEY](column)REFERNCESref_table(ref_column)3、创建check约束(1)创建数据表时创建check约束CREATETABLEtable_name(column_namedata_type[NOTNULL|CHECK(logical_expression)]...CHECK(logical_expression)])(2)在修改数据表时添加check约束ALTERTABLEtable_nameADDCHECK(logical_expression)4、创建default约束(1)创建数据表时创建default约束Createtabletable_name(column_namedatatype[notnull|DEFAULT(constraint_expression)]…)(2)修改数据表时添加一个字段的同时创建default约束Altertabletable_nameADDcolumn_namedatatype[notnull|DEFAULT(constraint_expression)]withvalues(3)对表中指定的列定义默认值约束Altertabletable_nameADD[DEFAULT(constraint_expression)]Forcolumn5、完整性约束命名子句CONSTRAINT完整性约束条件名[PRIMARYKEY短语︱FOREIGNKEY短语︱CHECK短语]6、删除primarykey约束或unique约束ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name[,...n]六、实验内容及步骤使用T-SQL语句实现以下操作;1.请用至少2种方法定义stu数据库中student表的主键sno;方法1:CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20),SsexCHAR(2),SageSMALLINT,SdeptCHAR(20))方法2:CREATETABLEStudent(SnoCHAR(9),SnameCHAR(20),SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno))2.将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk;AltertablecourseAddconstraintcno_pkprimarykey(cno)3.为表course中的字段cname添加唯一值约束;AltertablecourseAddconstraintcname_pkunique(cname)4.将数据库stu的表sc的sno及cno字段组合定义为主键,约束名称为sc_pk;AltertablescAddconstraintsc_pkprimarykey(sno,cno)5.对于数据表sc的sno、cno字段定义为外码,使之与表student的主码sno及表course的主码cno对应,实现如下参照完整性:1)删除student表中记录的同时删除sc表中与该记录sno字段值相同的记录;2)修改student表某记录的sno时,若sc表中与该字段值对应的有若干条记录,则拒绝修改;3)修改course表cno字段值时,该字段在sc表中的对应值也应修改;4)删除course表一条记录时,若该字段在在sc表中存在,则删除该字段对应的记录;UsestuCreatetablestudent(SnoCHAR(9),SnameCHAR(20),SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno))Createtablecourse(cnochar(4),cnamechar(40),cpnochar(4),cceditsmallint,foreignkey(cpno)referencescourse(cno),primarykey(cno))Createtablesc(snochar(9),cnochar(4),Gradesmallint,foreignkey(sno)referencesstudent(sno)ondeletecascadeonupdatenoaction,foreignkey(cno)referencescourse(cno)ondeletecascadeonupdatecascade)6.定义check约束,要求学生学号sno必须为9位数字字符,且不能以0开头,第二三位皆为0;AltertablestudentAddCONSTRAINTsno_ckCheck(snolike‘[1-9]00[0-9][0-9][0-9][0-9][0-9][0-9]’)7.定义stu数据库中student表中学生年龄值在16-25范围内;CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20),SsexCHAR(2),SageSMALLINTCheck(sage=16andsage=25),SdeptCHAR(20))8.定义stu数据库中student表中学生性别列中只能输入“男”或“女”;CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20),SsexCHAR(2)Check(Ssexin(‘男’,’女’)),SageSMALLINT,SdeptCHAR(20))9.定义stu数据库student表中学生年龄值默认值为20;CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20),SsexCHAR(2),SageSMALLINTDefault20,SdeptCHAR(20))七、出现问题及解决办法如:某些操作无法执行,如何解决?