目录
一、实体完整性
关系模型的实体完整性定义:
CREATE TABLE 中用PRIMARY KEY来定义
●单属性构成的码有两种说明方法:
定义为列级、表级约束条件
●多个属性构成的码只有一种说明方法:
定义为表级约束条件
插入一个记录或者主码值都要检查其是否为空、唯一。
高效方法:B+树索引
二、参照完整性
关系模型的参照完整性定义:
●在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码;
●用REFERENCES短语指明这些外码参照哪些表的主码。
例如:对于sc表
FOREIGN KEY(Sno)REFERENCES student(Sno)
违约处理:
参照完整性违约处理策略
1.拒绝(NO ACTION)执行(默认策略)
2.级联(CASCADE)操作
当删除或修改被参照表 (Student) 的一-个元组导致与参照表的 不一致时, 删除或修改参照表(SC) 中的所有导致不一致的元组。
3.设置为空值(SET NULL)
当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
显示说明参照完整性违约处理示例(按照用户的要求来)
CREATE TABLE SC
(Sno CHAR(9) ,
Cno CHAR(4) ,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno) ,
FOREIGN KEY (Sno) REFERENCES Student(Sno)
ON DELETE CASCADE ;/*级联删除SC表中相应的元组*/
ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/
FOREIGN KEY (Cno) REFERENCES Course(Cno)
ON DELETE NO ACTION
/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/
ON UPDATE CASCADE
/*当更新course表中的cno时,级联更新SC表中相应的元组*/
ON DELETE SET NULL
/*当删除course表中的元组造成了与SC表不一致时,将该字段设置为空*/ );
三、用户自定义完整性
1.CREATE TABLE时定义
列值非空(NOT NULL)
列值唯- - (UNIQUE)
检查列值是否满足一 个布尔表达式(CHECK)
2.完整性约束子句
例11:五个约束,第五个是表级约束,前四个是列级约束
四、触发器
create trigger 语法
CREATE TRIGGER <触发器名>
ON <表名|视图名>
{FOR| AFTER | INSTEAD OF} <触发事件>AS <触发动作体>
AFTER | INSTEAD OF触发器
触发器的两个特殊表
1.对于DML触发器,每个触发器触发时,系统都将在内存中自动创建两个特殊的临时表inserted表和deleted表。 这两个表的结构和触发器所关联的表的结构一致。
2.这两个表的内容只能查询,不能修改。
3.当触发器执行完毕后,inserted表和deleted表由系统自动删除。 SQL Server会自动创建和管理这些表。
4.deleted和inserted表中保存了可能会被用户更改的行的旧值和新值。INSTEAD OF触发器不会把修改的记录保存在相应的表中而after型会
修改触发器
ALTER TRIGGER <触发器名>
ON <表名|视图名>
{FOR| AFTER | INSTEAD OF} <触发事件>AS <触发动作体>
删除触发器
DROP TRIGGER 触发器名
查看触发器
查看所有触发器:select * from sysobjects where type='TR'
查看单个触发器:SP_HELPTEXT 触发器名
SP_HELPTEXT INSERT_SC
create trigger insert_SC_view
on View_SC
instead of insert
as
insert sc(sno,cno,grade)
select sno,cno,grade
from student,inserted, course
where student. sname = inserted .sname and course.cname- inserted.cname