数据完整性ok.doc
文本预览下载声明
(1)设置teacher表中tsex的取值只能是男或女,分别插入违反约束操作和合法操作进行验证;测试验证后,请删除该约束。
ALTER TABLE Teacher
ADD CONSTRAINT ts_sex CHECK (Tsex IN(男,女));
合法操作约束
INSERT INTO Teacher(TID,Tname,Tsex) VALUES(111,张三,男);
SELECT * FROM Teacher
违法操作约束
INSERT INTO Teacher(TID,Tname,Tsex) VALUES(121,张三,1);
DELETE Teacher WHERE TID = 111;
分析:输入的是除 男 或 女 以外的字符,所以出错
删除约束条件
ALTER TABLE Teacher
DROP CONSTRAINT ts_sex;
(2)、设置teacher表中的tdept的取值默认为SE
ALTER TABLE Teacher
ADD CONSTRAINT default_tdept DEFAULT SE FOR Tdept;
默认值验证
INSERT INTO Teacher(TID,Tname) VALUES(123,小雅);
SELECT * FROM Teacher
非默认值验证
INSERT INTO Teacher(TID,Tname) VALUES(123,小雅,CH);
SELECT * FROM Teacher
分析:默认值为SE,但键入的是CH,与默认值不符
DELETE Teacher WHERE TID = 123;
ALTER TABLE Teacher
DROP CONSTRAINT default_tdept;
(3)定义rule_sex只能是男或女,将此规定绑定到表student的ssex属性
CREATE RULE sex_rule AS @Ssex = 男 OR @Ssex = 女
EXEC sp_bindrule sex_rule,Student.Ssex
合法约束
INSERT INTO Student(Sno,Sname,Ssex) VALUES(123,小雅,男);
SELECT * FROM Student
非法约束
INSERT INTO Student(Sno,Sname,Ssex) VALUES(123,李四,1);
DELETE Student WHERE Sno = 123
分析:通过student表中的sno能够查到已经有学生学号123的存在,所以新的学生的学号不能为123
(4)、定义默认对象default_dept,默认值为SE,将默认对象绑定到student的sdept属性
CREATE DEFAULT Default_dept AS SE;
EXEC sp_bindefault Default_dept,Student.Sdept
合法操作
INSERT INTO Student(Sno,Sname,Ssex) VALUES(111,李四,女);
SELECT * FROM Student
非合法操作
INSERT INTO Student(Sno,Sname,Ssex) VALUES(123,李四,女);
SELECT * FROM Student
分析:在对象中原本有sno=111,插入sno=123重复插入
DELETE Student WHERE Sno = 111
(5)、验证级联删除约束
ALTER TABLE SC
ADD CONSTRAINT FK_C FOREIGN KEY(Cno) REFERENCES Course(Cno)
ON UPDATE NO ACTION
1、向sc表输入合法元素
SELECT * FROM SC
INSERT INTO SC VALUES (20121323012,N001,83);
INSERT INTO SC VALUES (123,C002,81);
向sc表输入非合法元素
INSERT INTO SC VALUES (124,C002,81);
分析:插入的学生学号不能在student表里查到,所以不能进行插入
2、定义course表和sc表之间的参照完整性约束,在delete行为上建立cascade级联
删除sc表的约束
ALTER TABLE SC DRO
显示全部