数据库实验五 完整性

一、实验目的:

1、掌握数据库约束的概念;

2、熟悉SQL SERVER 的完整性约束技术。

3、了解SQL SERVER 的违反完整性处理措施。

二、实验环境:

       Windows下的SQL

三、实验内容:

1.在前几次实验所使用的数据库中新建一个教师信息表,表名为Teacher,字段包括Tno(教师编号)Tname(姓名)Tsex(性别)Ttitle(职称),完整性包括:设定Tno为主键,Tname非空,Tsex的取值范围为

create tableTeacher(

Tno char(9) primary key,

Tname char(20) 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','王英','','助教')

违反了 PRIMARY KEY 约束“PK__Teacher__C450026D7AF6BC5D”。不能在对象“dbo.Teacher”中插入重复键。重复键值为 (2016001  )。

 

insert into Teacher values('2016002','张方','a','讲师')

INSERT 语句与 CHECK 约束"C3"冲突。该冲突发生于数据库"master",表"dbo.Teacher",column 'Tsex'。

性别只能是男或女。

 

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

alter table Teacher

add constraint C1 check (Ttitle in('助教','讲师','副教授','教授'));

 

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

INSERT 语句与 CHECK 约束"C1"冲突。该冲突发生于数据库"master",表"dbo.Teacher",column 'Ttitle'。

 

为学生表Student增加一个约束,Ssex的取值范围为

alter table student

add constraint s1 check (ssex in('男','女'));

 

为选课表Sc增加一个约束,Grade的取值在0100之间。

alter table sc

add constraint sc1 check (grade between 0 and 100);

 

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

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

是。

 

为选课表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_t onsc for insert

as

begin

    declare @bh char(5)

    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表中的相应信息也修改。

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

(注:89的操作使用createtrigger命令,触发器创建成功后,自己使用insert语句,或者update语句进行验证,验证完毕,可以将触发器删除)

create trigger student_t on student for update

as

begin

       declare @bh char(9)

       declare @ah char(9)

       select@bh=inserted.sno from inserted

       select @ah=deleted.snofrom deleted

       if exists (select snofrom sc where sc.sno=@ah)

              update sc setsno=@bh where sno=@ah;

end

10. 用触发器实现教材例题5.21,5.22的功能。

乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长,数据库定义完成后输入如下样本数据。完成后请将新定义的对象及数据生成到脚本文件3_1.sql,并分离数据库。(数据标识说明:BMXX 部门信息,QQLX 考勤类型, JBXX 基本信息,各字段定义请根据实际语义自行定义)。 2. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下安全定义。每小题2分,共6分。 (1) 创建名为L+考生学号的登录名,密码为考生学号。完成后请将定义程序代码保存到脚本文件3_2_1.sql。 (2) 为tempdb数据库创建名为U+考生学号的带登录名的用户名,使用本题(1)中创建的登录名。完成后请将定义程序代码保存到脚本文件3_2_2.sql。 (3) 为学生Student、课程Course、教师Teacher分配只读权限,成绩分配读写权限。完成后请将程序代码保存到脚本文件3_2_3.sql。 3.运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下完整性定义。每小题4分,共12分 (1) 在SC与Teacher之间定义参照完整性,外码名为FK_SC_Teacher_Tno,并定义违约处理规则:修改规则为 Cascade,删除规则为 No Action。完成后请将本操作的程序保存到脚本文件3_3_1.sql。 (2) 学生Student中学生姓名不允许重复,将此规则保存为UQ_Sname。完成后请将本操作的程序保存到脚本文件3_3_2.sql。 (3) 在学生上规定学生的性别只能是“”、“”,将此规则保存为CK_Student_Ssex。完成后请将本操作的程序保存到脚本文件3_3_3.sql。 4. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,在SSMS中查询分析器中计并调试如下查询,把SQL脚本代码分别保存到指定的SQL程序文件中。每小题3分,共15分 (1) 新增一位同学:200215129,王大鹏,,23,CS,新增该生一条选课数据:该生选了数据库课程,该课主教教师未知,还未考试。完成后请将查询代码保存到脚本文件3_4_1.sql。 (2) 修改少数民族学生李勇所有选修课成绩,都加5分。完成后请将查询代码保存到脚本文件3_4_2.sql。 (3) 因为考试事故,删除计科系的所有选课信息。完成后请将查询代码保存到脚本文件3_4_3.sql。 (4) 查询与“刘晨”同一个院系的其他同学的所有信息。完成后请将查询代码保存到脚本文件3_4_4.sql。 (5) 生成选修课为达标的学生的信息,包括学号、姓名、院系、总学分,达标条件:选修课门数达到6门。完成后请将查询代码保存到脚本文件3_4_5.sql。 5. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,为计科系生成如下选修课综合信息视图(仅包括计科系学生的选课信息,未选课的计科系学生也包括在视图的数据集中,如果未选课则课程等相关字段记为NULL,选了课但未考试则成绩等相关字段记为NULL,如果考试成绩未及格学分记为0,否则得到课程学分)。完成后请将本视图定义的程序保存到脚本文件3_5.sql。7分 6. SQL 程序计:运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下对象定义,把相应的SQL程序分别保存到指定的SQL文件中。每小题7分,共21分 (1) 为教师定义一个名为Tr_Insert_Or_Update_Sal触发器,实现如下完整性规则:“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。请完成触发体计,完成后请将本定义的程序保存到脚本文件3_6_1.sql。 Create Trigger Insert_Or_Update_Sal On Teacher After INSERT, UPDATE AS (2) 利用ROW_NUMBER() OVER计一分页查询存储过程DividePage,每次调用返回指定数据中指定页大小及页码的满足条件的记录结果集,其参数计如下,请完成过程体计,完成后请将本定义的程序保存到脚本文件3_6_2.sql。 Create Procedure DividePage ( @tblName varchar(255), --
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值