SQL 实验五 完整性

桂 林 理 工 大 学

实  验  报  告

班级   软件16-1班   学号  3162052051116     姓名  张识虔    同组实验者              

实验名称            完整性                   日期 2018年 07 月9 日

一、实验目的

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) PRIMARY KEY,
 Tname CHAR(20) not null,
 Tsex CHAR(2),check(Tsex in('男','女')),
 Ttitle CHAR(20)
);

2. 用insert语句插入如下记录,观察实验结果:

 insert into Teacher values('2016001','王明','男','讲师')
   insert into Teacher values('2016001','王英','女','助教')
   insert into Teacher values('2016002','张方','a','讲师')



学号主键不允许有出现重复 因为有两个相同的学号所以出现错误

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

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

CREATE TABLE Teacher
 (Tno CHAR(9) PRIMARY KEY,
 Tname CHAR(20) not null,
 Tsex CHAR(2) check(Tsex in('男','女')),
 Ttitle CHAR(20) check( Ttitle in('助教','讲师','副教授','教授'))
);
insert into Teacher values('2016003','刘阳','男','研究员');

研究员不在取值范围之内 所以出错

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

alter table student
add constraint c1 check(Ssex in('男','女'));

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

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

alter table Sc
add constraint c2 check(grade>=0 and grade<=100

6. 为选课表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表中的元组是否也做了相应的更改。

更改前

使用SQL语句

update Student
set Sno='201315123'
where Sname='王敏'

更改后

 

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

alter table sc
   add foreign key(cno) references course(cno)
   on delete cascade
   on update cascade

删除前



删除后

8. 建立一个触发器,当向sc表中添加数据时,如果添加的数据与student表中的数据不匹配(没有对应的学号),则将此数据删除。

CREATE TRIGGER sc_ins ONsc
FOR INSERT
AS
BEGIN
DECLARE @bh char(9)
Select @bh=Inserted.snofrom Inserted
If not exists(select sno fromstudent
where student.sno=@bh)
Delete sc where sno=@bh
END

9. 创建一个修改触发器,当student表中的sno信息修改时,自动将SC表中的相应信息也修改。

(简单要求:修改仅为一条记录)

create trigger tri_student_upd
on student
for update
as
begin
Declare @oldid char(9),@newid char(9)
Select @oldid=sno fromdeleted
Select @newid=sno frominserted
Update sc set sno=@newidwhere sno=@oldid
end
update student
set sno='123456789'
where sno='201215121'



  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您介绍SQL实验——数据库完整性约束的实现与验证。 在数据库中,完整性约束是用于保证数据的正确性和一致性的一种重要手段。常见的完整性约束包括:实体完整性参照完整性、域完整性、用户定义的完整性等。在本次实验中,我们将讲解如何使用SQL语句实现和验证这些完整性约束。 1. 实体完整性 实体完整性是指中的每一行数据都必须具有唯一标识符,也就是主键。主键可以由单个列或多个列组成,它们的值必须是唯一的,且不能为空。 在SQL中,我们可以通过以下语句来创建一个带有主键的: ``` CREATE TABLE 名 ( 列名1 数据类型, 列名2 数据类型, …… PRIMARY KEY (列名1, 列名2, ……) ); ``` 例如,创建一个名为“student”的,其中包含学生的学号(sno)、姓名(sname)和年龄(sage),其中学号是主键: ``` CREATE TABLE student ( sno VARCHAR(10), sname VARCHAR(20), sage INT, PRIMARY KEY (sno) ); ``` 2. 参照完整性 参照完整性是指关系数据库中的两个之间的关系必须保证数据的一致性。通常情况下,一个的某个列(称为“外键”)引用了另一个的主键,这样就可以保证两个之间的关系是正确的。 在SQL中,我们可以通过以下语句来创建一个带有外键的: ``` CREATE TABLE 名 ( 列名1 数据类型, 列名2 数据类型, …… FOREIGN KEY (列名) REFERENCES 另一个名(列名) ); ``` 例如,创建一个名为“course”的,其中包含课程的课程号(cno)、课程名称(cname)和教师号(tno),其中教师号引用了另一个“teacher”中的主键: ``` CREATE TABLE course ( cno VARCHAR(10), cname VARCHAR(20), tno VARCHAR(10), FOREIGN KEY (tno) REFERENCES teacher(tno) ); ``` 3. 域完整性完整性是指中的每个列都必须满足一定的数据类型和数据范围。例如,一个年龄列必须是整数类型,且必须大于等于0。 在SQL中,我们可以通过以下语句来创建一个带有域完整性约束的: ``` CREATE TABLE 名 ( 列名1 数据类型 CONSTRAINT 约束名 CHECK (条件), 列名2 数据类型 CONSTRAINT 约束名 CHECK (条件), …… ); ``` 例如,创建一个名为“teacher”的,其中包含教师的教师号(tno)、姓名(tname)和年龄(tage),其中年龄必须大于等于25: ``` CREATE TABLE teacher ( tno VARCHAR(10), tname VARCHAR(20), tage INT CONSTRAINT CK_age CHECK (tage >= 25) ); ``` 4. 用户定义的完整性 用户定义的完整性是指用户可以根据自己的需求定义一些额外的完整性约束。例如,一个学生的年龄必须小于20岁。 在SQL中,我们可以通过以下语句来创建一个用户定义的完整性约束: ``` ALTER TABLE 名 ADD CONSTRAINT 约束名 CHECK (条件); ``` 例如,为“student”添加一个用户定义的完整性约束,要求学生的年龄必须小于20岁: ``` ALTER TABLE student ADD CONSTRAINT CK_age CHECK (sage < 20); ``` 以上就是SQL实验——数据库完整性约束的实现与验证的内容。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值