实验八:数据库的完整性约束一、实验目的1.掌握主键约束、外键约束及及check约束的用法;2.掌握默认值约束的应用;3.了解规则、触发器的使用。二、实验环境已安装SQLServer企业版的计算机;具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.熟悉数据库完整性相关概念及约束;2.了解约束、默认值及规则;3.完成实验报告;五、实验内容及步骤以系统管理员身份登录到SQLServer服务器,并使用T-SQL语句实现以下操作;1.请用至少2种方法定义stu数据库中student表的主键sno;○1------列级定义------createdatabasestu;createtablestudent(snochar(12)primarykey)○2------表级定义------createdatabasestu;createtablestudent(snochar(12)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表中存在,则删除该字段对应的记录;5)向sc表添加记录时,如果该记录的sno字段的值在student中不存在,则拒绝插入;altertablescaddconstraintsc_fkforeignkey(sno)referencesstudent(sno)ondeletecascadeonupdatenoaction,foreignkey(cno)referencescourse(cno)ondeletecascadeonupdatecascadego6.定义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范围内;altertablestudentaddconstraintsage_ckcheck(sagebetween16and25)8.定义stu数据库中student表中学生姓名长度在2-8之间;altertablestudentaddconstraintsname_ckcheck(len(sname)between2and8)9.定义stu数据库中student表中学生性别列中只能输入“男”或“女”;altertablestudentaddconstraintssex_ckcheck(ssexin('男','女'))10.定义stu数据库student表中学生年龄值默认值为20;altertablestudentaddconstraints_agedefault20forsage11.修改student表学生的年龄值约束可以为15-30范围内;altertablestudentdropconstraintsage_ckgoaltertablestudentaddconstraintsage_ckcheck(sage=15andsage=30)12.删除上述唯一值约束、外键约束及check约束;altertablecoursedropconstraintcname_pkgoaltertablescdropconstraintsc_fkgoaltertablestudentdropconstraintsno_ck,sage_ck,sname_ck,ssex_ck13.思考题:定义规则对象,用于保证course表中cno字段值为5个数字字符;(可选做)createrulec_cnoas@alike'[0-9][0-9][0-9][0-9][0-9]'goexecsp_bindrule'c_cno','course.cno'14.思考题:向sc表中插入或修改一条记录时,通过触发器检查记录sno字段的值在student表中是否存在,若不存在,则取消插入或修改操作;(可选做)createtriggerabconscforinsert,updateasif(selectsnofrominserted)notin(selectsnofromstudent)beginrollbacktransactionend15.思考题:删除student表中一条记录的同时删除其在sc表中对应的记录;(参照完整性、触发器均可实现)createtriggerde_stuonstudentfordeleteasbegindeletefromscwheresnoin(selectsnofromdeleted)end六、出现问题及解决办法如:某些操作无法执行,如何解决?