一、实验目的:
1、掌握数据库约束的概念;
2、熟悉SQL SERVER 的完整性约束技术。
3、了解SQL SERVER 的违反完整性处理措施。
二、实验环境及准备:
1、了解数据库完整性约束的基本概述
2、了解SQL Server完整性约束技术。 包括实体完整性、参照完整性、用户定义完整性等。
3、了解主键(PRIMARY KEY)约束
4、了解外键(FOREIGN KEY)约束
5、了解唯一性(UNIQUE)约束
6、了解检查(CHECK)约束
7、了解DEFAULT 约束
8、了解允许空值约束
9、了解触发器的使用
三、实验内容:
(写出主要的内容)
1. 在前几次实验所使用的数据库中新建一个教师信息表,表名为Teacher,字段包括Tno(教师编号),Tname(姓名),Tsex(性别),Ttitle(职称),完整性包括:设定Tno为主键,Tname非空,Tsex的取值范围为“男”或“女”。
CREATE TABLE Teacher
(Tno CHAR(9) CONSTRAINT C1 PRIMARY KEY,
Tname CHAR(20) CONSTRAINT C2 NOT NULL,
Tsex CHAR(2) CONSTRAINT C3 CHECK(Tsex in('男','女')),
Ttitle CHAR(20),
);
2. 用insert语句插入如下记录,观察实验结果:
insert into Teacher values('2016001','王明','男','讲师')
insert into Teacher values('2016001','王英','女','助教')
insert into Teacher values('2016002','张方','a','讲师')
ALTER TABLE Teacher
ADD CONSTRAINT C4 CHECK (Ttitle in ('助教','讲师','副教授','教授'));
insert into Teacher values('2016003','刘阳','男','研究员'),观察实验结果。
ALTER TABLE Student
ADD CONSTRAINT S1 CHECK (Ssex in('男','女'))
(提示,3,4,5是对表的结构增加约束定义,使用命令为:Alter table)
ALTER TABLE SC
ADD CONSTRAINT SC1 CHECK (Grade>=0 and Grade<=100)
alter table sc
add foreign key(sno) references student(sno)
on delete cascade
on update cascade
使用SQL语句,将Student表中姓名为”王敏”的元组,学号更改为“201315123”,然后查看SC表中的元组是否也做了相应的更改。
UPDATE Student
SET sno='201315123'
WHERE sname='王敏'
alter table sc
add foreign key(cno) references course(cno)
on delete cascade
on update cascade
验证:
update Course
set cno='11'
where cname='数据库;
8. 建立一个触发器,当向sc表中添加数据时,如果添加的数据与student表中的数据不匹配(没有对应的学号),则将此数据删除。
create trigger SC_sc on SC
for insert
as
begin
declare @bh char(9)
select @bh=INSERTED.sno from INSERTED
if not exists(select sno from student where student.sno=@bh)
delete from SC where sno=@bh
end
9. 创建一个修改触发器,当student表中的sno信息修改时,自动将SC表中的相应信息也修改。
(简单要求:修改仅为一条记录)
(注:8,9的操作使用create trigger命令,触发器创建成功后,自己使用insert语句,或者update语句进行验证,验证完毕,可以将触发器删除)
create trigger St_st on Student
for update
as
update SC set sno=(select sno from inserted)
where sno=(select sno from deleted)
update Student
set sno='201215133'
where sname='李勇'