一.实验目的
(1)了解实现数据完整性的概念及实施数据完整性的重要性。
(2)掌握数据完整性的分类。
(3)掌握完整性约束的添加、删除方法。
(4)掌握默认值的创建、实施与删除方法。
(5)掌握规则的创建、实施与删除方法。
(6)掌握级联删除、级联修改方法。
二.实验内容
完整性约束的添加、删除
(1)使用SQL Server Management Studio实施约束。
a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。
右击Birth列,选择CHECK约束
新建约束,在表达式处填入约束表达式:b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。
选择Sdept列,在"默认值或绑定"处填写默认值c.为Student表的Sname字段添加唯一性约束。
在设计窗口右击,选择"索引/键"
单击"添加"按钮,选择Sname列,在"是唯一的"栏中选择"是"d.为SC表的Sno,Cno字段设置外键约束,约束名自己取,并允许级联删除与级联更新。若已存在外键约束,请先删除。
在SC表的设计窗口右击,选择"关系"列
单击添加,在"表和列规范"选线后面单击按钮
选择关联的表
同样的操作关联Course表和SC表,如下图设置级联删除和级联更新(2)使用Transact-SQL语句实施约束。
a.为student表的Sno字段添加一个check约束,使学号满足如下条件:学号前四位为2011,学号后四位为数字字符。alter table Student add constraint CK_Sno check(Sno like '2011[0-9][0-9][0-9][0-9]')
b.为student表中的Birth字段添加一个约束,规定生日应小于入学时间。
alter table Student add constraint CK_Birth check(year(Birth)<year(Entrance_date));
c.禁用(a)中实施的Check约束。
alter table Student nocheck constraint CK_Sno;
d.重新启用Check约束。
alter table Student check constraint CK_Sno;
e.删除(a)所设置的check约束。
alter table Student drop constraint CK_Sno;
f.将Student表中的Classno字段设置为允许空。
alter table Student alter column Classno char(3) null;
g.为SC表中的Sno,Cno添加外键约束,约束名自取;并允许级联删除与级联更新。若已存在外键约束,请先删除。
alter table SC add constraint FK_Sno foreign key (Sno) references Student(Sno) on delete cascade on update cascade; alter table SC add constraint FK_Cno foreign key (Cno) references Course(Cnoo) on delete cascade on update cascade;
h.为Course表中的Cname字段添加唯一性约束。
alter table Course add unique(Cname);
默认值的实施
(1)通过SQL Server Management Studio实现。
a.为数据库Student_info创建一个默认的邮政编码,名称自取,值为:200093。b.将该默认值绑定到Student表中的Postcode列。
c.将Postcode列上的绑定解除,并删除该默认值。
(2)用Transact-SQL语句重做(1)中的(a)、(b)、(c)。
a:create default df_Postcode as '200093';
b:
sp_bindefault df_Postcode,'Student.Postcode';
c:
sp_unbindefault 'Student.Postcode' drop default df_Postcode;
规则的实施
(1)通过SQL Server Management Studio实现。
a.为数据库Student_info创建一个关于性别的取值规则,规则名自取,要求字段的取值仅能为’男’或’女’。
b.将该规则绑定到Student表的Sex字段上。
c.解除Student表的sex列上的绑定,并删除该规则。
(2)使用T-SQL重做(1)中的(a)、(b)、(c)。
a:create rule rl_sex as @sex like '[男,女]';
b:
exec sp_bindrule rl_sex,'Student.Sex';
c:
sp_unbindrule 'Student.Sex'; drop rule rl_sex;