数据库实验之完整性

一、实验目的:

 

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','讲师')

 

  1. 对Teacher表增加一个约束,Ttitle属性的取值范围为('助教','讲师','副教授','教授'),并插入一条记录:

ALTER TABLE Teacher

ADD CONSTRAINT C4 CHECK (Ttitle in ('助教','讲师','副教授','教授'));  

 

 insert into Teacher values('2016003','刘阳','男','研究员'),观察实验结果。

 

  1. 为学生表Student增加一个约束,Ssex的取值范围为“男”或“女”。

ALTER TABLE Student

ADD CONSTRAINT S1 CHECK (Ssex in('男','女'))

 

  1. 为选课表Sc增加一个约束,Grade的取值在0至100之间。

(提示,3,4,5是对表的结构增加约束定义,使用命令为:Alter table)

ALTER TABLE SC

ADD CONSTRAINT SC1 CHECK (Grade>=0 and Grade<=100)

 

  1. 为选课表Sc增加参照完整性及违约处理,定义sno为外键,与student表中的sno关联,当删除、更新student中的元组时,级联删除、更新Sc表中的相应元组,命令为:

  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='王敏'

 

  1. 为选课表Sc增加参照完整性及违约处理,定义cno为外键,与course表中的cno关联,当删除、更新course中的元组时,级联删除、更新Sc表中的相应元组,并进行验证。

 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='李勇'

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值