导图社区 数据库系统概论-第五章
数据库系统概论-第五章,数据库完整性包括实体完整性,参照完整性,用户定义完整性,完整性约束命名子句,域中的完整性限制。
编辑于2022-06-04 15:32:20数据库完整性
概念
数据库完整性的定义
数据的完整性与安全性的关系
目的
防范对象
为了维护数据库的完整性,数据库管理系统必须实现的功能
提供定义完整性约束条件的机制
完整性约束条件的定义
SQL标准对完整性的描述
提供完整性检查的方法
完整性检查的定义
检查的时间
检查的内容
进行违约处理
关系数据库管理系统
实体完整性
定义实体完整性
p158
方法
码的类型
单属性构成的码
多个属性构成的码
实体完整性检查和违约处理
检查内容
检查方法
参照完整性
定义参照完整性
参照完整性和违约处理
参照完整性
参照完整性将两个表中的相应元组联系起来了。因此对被参照表和参照表进行增、 删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。
违约处理
一般地,当对参照表和被参照表的操作违反了参照完整性时,系统选用默认策略, 即拒绝执行。如果想让系统采用其他策略,则必须在创建参照表时显式地加以说明。
拒绝执行
级联操作
设置为空值
用户定义的完整性
概念
用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。关系数据库 管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整 性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。
属性上约束条件
定义
在 CREATE TABLE 中定义属性的同时,可以根据应用要求定义属性上的约束条 件,即属性值限制,包括:列值非空(NOT NULL);列值唯一(UNIQUE);检查 列值是否满足一个条件表达式(CHECK 短语)
检查和违约处理
当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性的约束条 件是否被满足,如果不满足则操作被拒绝执行
元组上的约束条件
定义
与属性上约束条件的定义类似,在 CREATE TABLE 语句中可以用 CHECK 短语定 义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可 以设置不同属性之间的取值的相互约束条件。
检查和违约处理
当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约 束条件是否被满足,如果不满足则操作被拒绝执行。
完整性约束命名子句
定义子句
CONSTRAINT<完整性约束条件名><完整性约束条件> <完整性约束条件>包括 NOT NULL、 UNIQUE、 PRIMARY KEY、 FOREIGN KEY 、 CHECK 短语等。
修改子句
可以使用 ALTER TABLE 语句修改表中的完整性限制。
域中的完整性限制
域的概念
定义
优点
声明域
修改域
断言
概念
创建断言的语句格式
CREATE ASSERTION<断言名<<CHECK 子句< 每个断言都被赋予一个名字,<CHECK 子句>中的约束条件与 WHERE 子句的条件 表达式类似。
删除断言的语句格式
DROP ASSERTION<断言名>
触发器
概念
触发器(trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。任何用 户对表的增、删、改操作均由服务器自动激活相应的触发器,触发器类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数 据控制能力。
定义触发器
语句格式
触发器又叫做事件-条件-动作规则。SQL 使用 CREATE TRIGGER 命令建立触发器, 其一般格式为 CREATE TRIGGER<触发器名> {BEFORE|AFTER}<触发事件>ON<表名> REFERENCING NEW|OLD ROW AS<变量> FOR EACH {ROW|STATEMENT} [WHEN<触发条件>]<触发动作体>
语法说明
(1)只有表的拥有者,即创建表的用户才可以在表上创建触发器,并且一个表上只 能创建一定数量的触发器。 (2)触发器名。同一模式下,触发器名必须是唯一的,并且触发器名和表名必须在 同一模式下。 (3)表名。触发器只能定义在基本表上,不能定义在视图上。当基本表的数据发生 变化时,将激活定义在该表上相应触发事件的触发器,因此该表也称为触发器 的目标表。 (4)触发事件。触发事件可以是 INSERT、DELETE 或 UPDATE,也可以是这几个事件 的组合。 AFTER/BEFORE 是触发的时机。 AFTER 表示在触发事件的操作执行之 后激活触发器; BEFORE 表示在触发事件的操作执行之前激活触发器。 (5)触发器类型。触发器按照所触发动作的间隔尺寸可以分为行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT) (6)触发条件。触发器被激活时,只有当触发条件为真时触发动作体才执行,否则 触发动作体不执行。如果省略 WHEN 触发条件,则触发动作体在触发器激活后 立即执行。 (7)触发动作体。触发动作体既可以是一个匿名 PL/SQL 过程块,也可以是对已创建 存储过程的调用。
激活触发器
触发器的执行是由触发事件激活,并由数据库服务器自动执行的。一个数据表上可 能定义了多个触发器,同一个表上的多个触发器激活时遵循如下的执行顺序: (1)执行该表上的 BEFORE 触发器。 (2)激活触发器的 SQL 语句。 (3)执行该表上的 AFTER 触发器。 对于同一个表上的多个 BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则。
删除触发器
删除触发器的 SQL 语法如下: DROP TRIGGER<触发器名>ON<表名> 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。