实验9. 用户自定义完整性
9.1 实验目的
学习用户自定义约束,并实践用户自定义完整性,利用SQL查询分析器用短语NOT NULL、UNIQUE、CHECK保证用户定义完整性。 9.2 实验内容(建议将表改成Teachers,相应属性以T开始命名,如Tname)建立Teacher表。 建立表Teacher,注意跟前面所建立的Teacher区分开来,
(1) 创建Worker,Teacher表,并自定义2个约束U1以及U2,其中U1规定
Wname Tname字段唯一,U2规定Wage, Tage (级别)字段的上限是28。 (2) 在Worker, Teacher表中插入一条合法记录。
(3) 演示插入违反U2约束的例子,U2规定元组的Wage,Tage属性的值必须
<=28。
(4) 去除U2约束。
(5) 重新插入(3)中想要插入的数据,由于去除了U2约束,所以插入成功。 (6) 创建规则Rule_sex,规定插入或更新的值只能是M或F,并绑定到Worker
Teacher的Wsex Tsex字段。
(7) 演示违反规则Rule_sex的插入操作。 9.3 实验步骤
以系统管理员或sa帐号登录查询分析器,在查询分析器窗体下输入如下命令,运行并观察结果。
(1) 在查询分析器中输入如下SQL语句:
USE University_Mis
CREATE TABLE Teacher( Tno CHAR(5),
Tname CHAR(8) CONSTRAINT U1 UNIQUE, Tsex CHAR(1),
Tage INT CONSTRAINT U2 CHECK (Tage<=28), Tdept CHAR(20),
CONSTRAINT PK_Teacher PRIMARY KEY(Tno))
(2) 在查询分析器中输入如下SQL语句
USE University_Mis
INSERT INTO Teacher (Tno, Tname,Tsex, Tage,Tdept) VALUES(‘T01’,’李用’,’M’,14,’后勤部’) SELECT * FROM Teacher
(3) 在查询分析器中输入如下SQL语句
USE University_Mis
16
INSERT INTO Teacher (Tno, Tname,Tsex, Tage,Tdept) Values(‘T02’,’王勇’,’M’,38,’ 后勤部’) SELECT * FROM Teacher
(4) 在查询分析器中输入如下SQL语句
USE University_Mis
ALTER TABLE Worker DROP U2
(5) 在查询分析器中输入如下SQL语句
USE University_Mis
INSERT INTO Teacher (Tno, Tname,Tsex, Tage,Tdept) VALUES(‘T02’,’王勇’,’M’,38,’ 后勤部’) SELECT * FROM Teacher
(6) 在查询分析器输入如下SQL语句
USE University_Mis Go
CREATE RULE Rule_sex AS @Value IN (‘F’,’M’) Go
EXEC SP_bindrule Rule_sex, ‘Teacher.[Tsex]’;
(7) 在查询分析器中输入如下SQL语句
USE University_Mis
INSERT INTO Teacher VALUES(‘T03’,’黄号’,’1’,’25’,’ 后勤部’)
17
实验10、触发器
10.1 实验目的
通过实验使学生加深对数据完整性的理解,学会创建和使用触发器。 10.2 实验内容 (用实验9的Teacher表)
(1) 为Teacher表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的Tage值大于0。
(2) 为Teacher表建立触发器T2,禁止删除编号为00001的CEO。
(3) Teacher表中的人员的编号是唯一且不可更变的,创建触发器T3实现更新中编号的不可改变性。
(4) 演示违反T1触发器的约束的插入操作。 (5) 演示违反T1触发器的约束的更新操作。 (6) 演示违反T2触发器的约束的插入操作。 (7) 演示违反T2触发器的约束的更新操作。 10.3 实验步骤
(1) 仍然使用自定义完整性实验中的Teacher表。为此表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的Tage值大于0。 在查询分析器中输入如下SQL语句
USE University_Mis GO
CREATE TRIGGER T1 ON Teacher FOR INSERT,UPDATE AS
IF(SELECT Tage FROM INSERTED)<1 BEGIN
PRINT ‘职工年龄必须是大于0的整数! 操作失败!’ ROLLBACK TRANSACTION END
(2) 为Teacher表建立触发器T2,禁止删除编号为S01的CEO。
在查询分析器中输入如下SQL语句 USE University_Mis GO
CREATE TRIGGER T2 ON Teacher FOR DELETE AS
IF(SELECT Tno FROM DELETED)=’T01’ BEGIN
PRINT ‘此人是CEO! 删除操作失败!’ ROLLBACK TRANSACTION END
18
(3) Teacher表中的人员的编号是唯一且不可更变的,创建触发器T3实现更新中编号的不可改变性。
在查询分析器中输入如下SQL语句 USE University_Mis GO
CREATE TRIGGER T3 ON Teacher FOR UPDATE AS
IF UPDATE(Tno) BEGIN
PRINT ‘职工编号不能修改!’ ROLLBACK TRANSACTION END
(4) 在查询分析器中输入如下SQL语句
USE University_Mis
INSERT INTO Teacher VALUES(‘T03’,’ 李宏’,’F’,-10,’开发部’)
(5) 在查询分析器中输入如下SQL语句
USE University_Mis
UPDATE Teacher SET Tage=-7 WHERE Tno=’T01’
(6) 在查询分析器中输入如下SQL语句
USE University_Mis
DELETE FROM Teacher WHERE Tname=’李用’
(7) 在查询分析器中输入如下SQL语句
USE University_Mis
UPDATE Teacher SET Tno=’T07’ WHERE Tsex=’F’ 19
特别要求与说明
1、每做一个实验都要写实验报告,报告格式见参考模板。
2、以上10个实验中用粗体字书写的实验内容要求同学必须完成,并将相应命令和执行结果窗口剪贴到实验报告中。
3、 本课程实验1至实验9的要求都是统一的,但每个同学在实验时必将其修改成针对自己的、具有个性化的特殊实验要求。修改的关键是在数据库、基本表和属性的命名中必须加上自己的姓名信息。操作方法如下:
① 基本表命名与数据库名类似,都是姓的全拼加上名的第一个字母和下划线组成前缀,比如黄德才姓名为Huang de cai,则前缀是huangdecai_,因此数据库University_Mis和基本表Students分别命名为Huangdc_University_Mis和Huangdc_Students。
② 属性名的前缀以姓名的第一个字母和下划线组成,比如,黄德才姓名为huang de cai,则属性的前缀是hdc_,基本表huangdc_Students中属性名为Sname, Scredit, Sroom就分别命名为hdc_Sname, hdc_Scredit, hdc_Sroom。 4、要求把实验过程、SQL命令和执行结果窗口复制到实验报告中,请从精品课程网站下载毕业设计报告模板。
5、实验报告通过精品课程网站提交。
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验1,数据定义(4)在线全文阅读。
相关推荐: