实验七:数据库的完整性约束
一、实验目的
1. 掌握主键约束、外键约束及check约束的用法;
2. 掌握默认值约束和默认值对象的应用;
3. 掌握用触发器实现参照完整性的方法。
二、实验学时
2学时
三、实验要求
1. 了解约束、默认值;
2. 了解触发器的定义方法;
3. 掌握触发器的编写和运行方法
4. 完成实验报告。
四、实验内容
1. 数据完整性。以实验数据库为基础数据,请使用T-SQL语句完成以下内容,并将SQL语句写在实验报告册中:
1) 将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk;
2) 为表course中的字段cname添加唯一值约束;
创建唯一约束sql语句3) 对于数据表sc的sno、cno字段定义为外码,使之与表student的主码sno及表course的主码cno对应,实现如下参照完整性:
● 删除student表中记录的同时删除sc表中与该记录sno字段值相同的记录;
● 修改student表某记录的sno时,若sc表中与该字段值对应的有若干条记录,则拒绝修改;
● 修改course表cno字段值时,该字段在sc表中的对应值也应修改;
● 删除course表一条记录时,若该字段在在sc表中存在,则删除该字段对应的记录;
● 向sc表添加记录时,如果该记录的sno字段的值在student中不存在,则拒绝插入;
4)定义check约束,要求学生学号sno必须为9位数字字符,且不能以0开头,第二三位皆为0;
5)定义stu数据库中student表中学生年龄值在16~25范围内;
6)定义stu数据库student表中学生年龄值默认值为20;
7) 修改student表学生的年龄值约束可以为15~30范围内;
8) 删除表course中字段cname的唯一值约束;
2. 以实验数据库为基础数据,编写以下触发器并测试。
1) 为表course建立一个 INSERT触发器,当插入的新行中课程学分(ccredit)的值不是1~6时,就激活该出发器,撤销该插入操作,并使用RAISERROR语句返回一个错误信息。
2)为course表再创建一个UPDATE触发器,当更新了某门课程的课程号信息时,就激活该触发器级联更新sc表中相关的课程号信息,并使用PRINT语句返回一个提示信息。
3)为student表创建DELECT触发器,在删除中的一条记录的同时将sc表中的相应记录也删除。
4)创建INSTEAD OF触发器,当向sc表中插入记录时,先检查sno列上的值在student中是否存在,如果存在执行插入操作,如果不存在则提示“该学生不存在”。
5)比较约束与触发器的执行顺序。(在一个表中创建CHECK约束和触发器,然后向表中插入一条不符合约束和触发器的记录,察看谁先发生作用。)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论