当前位置: 首页 > >

数据库---第五章---数据库完整性

发布时间:

第五章 ?数据库完整性
一、实体完整性
1. 实体完整性定义
a.关系模型的实体完整性
CREATE ?TABLE中用PRIMARY KEY定义
b.单属性构成的码有两种说明方法?
定义为列级约束条件
定义为表级约束条件
c.对多个属性构成的码只有一种说明方法
定义为表级约束条件?
2. 实体完整性检查和违约处理
a.插入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。包括:
检查主码值是否唯一,如果不唯一则拒绝插入或修改
检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
b.检查记录中主码值是否唯一的一种方法是进行全表扫描
依次判断表中每一条记录的主码值与将插入记录上的主码值(或者修改的新主码值)是否相同?
d.表扫描缺点
十分耗时
e.为避免对基本表进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引?
二、参照完整性
1.参照完整性定义
关系模型的参照完整性定义
在CREATE ?TABLE中用FOREIGN KEY短语定义哪些列为外码
用REFERENCES短语指明这些外码参照哪些表的主码?
2.参照完整性检查和违约处理
a.一个参照完整性将两个表中的相应元组联系起来
b.对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查?
c.参照完整性违约处理
(1)绝执行
不允许该操作执行。该策略一般设置为默认策略
(2)级联操作
当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组
(3)设置为空值
当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
d.对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值?
三、用户定义的完整性
1.属性上的约束条件
a.CREATE TABLE时定义属性上的约束条件
列值非空
列值唯一
检查列值是否满足一个条件表达式
b.属性上的约束条件检查和违约处理
插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足
如果不满足则操作被拒绝执行?
2.元组上的约束条件
a.在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
b.同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件?
c.元组上的约束条件检查和违约处理
插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足
如果不满足则操作被拒绝执行?
四、完整性约束命名子句
1.CONSTRAINT <完整性约束条件名><完整性约束条件>
<完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK短语等
2.修改表中的完整性限制
使用ALTER TABLE语句修改表中的完整性限制
五、断言
1.SQL中,可以使用 CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。
2.可以定义涉及多个表的或聚集操作的比较复杂的完整性约束。
3.断言创建以后,任何对断言中所涉及的关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行
六、触发器
1.定义触发器
CREATE TRIGGER语法格式
?? ? ? CREATE TRIGGER <触发器名> ?
? ? ? ?{BEFORE | AFTER} <触发事件> ON <表名>
? ? ? ?REFERENCING NEW|OLD ROW AS<变量>
? ? ? ?FOR EACH ?{ROW | STATEMENT}
? ? ? ?[WHEN <触发条件>]<触发动作体>
2.激活触发器
a.触发器的执行,是由触发事件激活的,并由数据库服务器自动执行
b.一个数据表上可能定义了多个触发器,遵循如下的执行顺序:
(1)执行该表上的BEFORE触发器;
(2)激活触发器的SQL语句;
(3)执行该表上的AFTER触发器。
3.删除触发器
a.删除触发器的SQL语法:
? ? ? ?DROP TRIGGER <触发器名> ON <表名>;
b.触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。



友情链接: