实验05数据完整性.doc
文本预览下载声明
实验5 数据完整性
系别:计算机科学与技术系 专业班级:计算机科学与技术5班
姓名: 学号:
实验日期:2013-11-29 实验报告日期:2013-12-11
实验目的:
1.掌握SQL Server中的约束类型
2.掌握各种约束的实施方法
实验要求:
1.掌握表自身的完整性实施方法
2.掌握表间完整性的实施方法
3.加深对数据完整性的理解
实验环境及学时安排:
1.SQL SERVER2005
2.学时:2学时
实验内容:
1.主键约束:
首先在选课表SC中添加主键约束,主键为(Sno,Cno),然后试着将SC中的某条记录的课程号字段改为空,体会主键约束的作用。
试着将学生表Student中的两条记录的学号字段改为相同的值,体会主键约束的作用。
update sc set sno=101
where sno=103;
2.惟一约束:
对Department表中的系名字段施加惟一约束,并在该表中添加一条新纪录。其中,新纪录中的系名字段为NULL,体会与主键约束的不同。
alter table department
add constraint fk_department unique(DepID);
insert into Department values(null,计算机系,麓山南路号,808);alter table course
drop constraint tno_fk;
alter table course
add constraint fk_Tno foreign key(TNo) references teacher(Tno)
on delete set null
on update cascade;
delete from teacher where Tno=804;
delete之后(tno=‘804’的教师的信息已经删除)
而course表如下图:
update teacher set tno=807 where tno=825;
update tno=807 where tno=825
之后Teacher表如下图:
4.默认约束:
创建默认sdefault为‘男’。
将sdefault绑定到学生表的性别列。
alter table student
add constraint default_sex default 男 for sex;
insert into student(sno,sname,class) values(115,张三,95033);
结果如下图:
5.规则约束:
创建规则prule使其取值必须是(’助教’,’讲师’,’副教授’ ,’教授’)。
将规则prule绑定到教师表的职称列。
CREATE RULE是批处理语句,
语句:
go
DECLARE @prof as nchar(5);
go
CREATE RULE prule AS @prof in(助教,讲师,副教授,教授);
exec sp_bindrule prule,teacher.prof;
insert into teacher values(857,张凯迪,女,处长5);
结果:
6.动态约束:
在教师表Teacher上定义触发器,使其在更新教师职称时只能升高不能降低,但可以破格(如:讲师-教授)。
语句:
IF EXISTS (SELECT name FROM sysobjects WHERE name = tch_up AND type = TR)
DROP TRIGGER tch_up
GO
CREATE TRIGGER tch_up
ON Teacher
FOR UPDATE
AS
declare @oldrank smallint,@newrank smallint
if update(prof)
begin
select @oldra
case d.prof
when 助教 then 1
when 讲师 then 2
when 副教授 then 3
when 教授 then 4
end
from Teacher t,deleted d where t.prof=d.prof
select @newrank=
case i.prof
显示全部