数据库完整性

目录

1.实体完整性

2.参照完整性

3.用户自定义完整性

4.触发器


一、实体完整性

关系模型的实体完整性定义:

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值