第五章 数据库完整性
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参照完整性违约处理
发生数据不一致时,有三种处理方法: 发生数据不一致时,有三种处理方法:
拒绝执行:默认策略) 拒绝执行:默认策略) 级连操作: 级连操作:修改或删除被参照表的数据时级连 操作参照表的对应数据 置空值操作: 置空值操作:将参照表的对应属性值置空值 使用该策略时要同时考虑实体完整性) (使用该策略时要同时考虑实体完整性)
实体完整性检查与违约处理
实体完整性检查
检查主码值是否唯一(全表扫描) 检查主码值是否唯一(全表扫描) 检查主码各属性是否为空
违约处理
拒绝插入或修改操作
5.2 参照完整性
Table中用 中用Foreign Key定义 在Create Table中用Foreign Key定义
例:定义SC表的参照完整性 定义SC表的参照完整性 SC
5.5 触发器
定义在表上的由事件驱动的特殊过程 定义触发器
<触发器名 触发器名> Create Trigger <触发器名> {Before|After}<触发事件> <表名 表名> {Before|After}<触发事件> On <表名> 触发事件 For Each {Row|Statement} <触发条件 触发条件>] [When <触发条件>] <触发动作体> 触发动作体>
5.5 触发器
触发事件
Insert、Delete、 Insert、Delete、Update
触发器类型
行级触发器——For 行级触发器——For Each Row 语句触发器——For Each Statement For 语句触发器
触发条件
触发条件为“ 触发条件为“真”时触发动作体才执行
触发动作体
பைடு நூலகம்.1 实体完整性
Table中用 中用Primary Key定义 在Create Table中用Primary Key定义 对于单属性构成的码,可以定义为: 对于单属性构成的码,可以定义为:
列级约束条件 表级约束条件
对于组合属性构成的码,只能定义为: 对于组合属性构成的码,只能定义为:
表级约束条件
5.4 完整性约束命名子句
完整性约束命名子句—Constraint 完整性约束命名子句 Constraint <完整性约束名 完整性约束名> constraint <完整性约束名> [primary key 短语|foreign key 短语|check短语等] 短语|check短语等] |check短语等 短语|foreign
5.3 用户定义完整性
针对某一具体应用的数据必须满足的要求 按定义对象可分为: 按定义对象可分为:
属性约束: 属性约束:单个属性值的约束
列值非空 列值唯一 列值要满足的布尔表达式
元组约束: 元组约束:不同属性之间取值的相互约束
(如库存关系中出库数量不能大于库存数量) 如库存关系中出库数量不能大于库存数量)
第五章 数据库完整性
数据库的完整性
数据的正确性和相容性 防止不合语义的数据进入数据库。 防止不合语义的数据进入数据库。
完整性: 完整性:能否真实地反映现实世界
完整性控制机制
1.完整性约束条件定义机制 1.完整性约束条件定义机制 2.完整性检查机制 2.完整性检查机制 3.违约处理 3.违约处理 完整性约束条件: 完整性约束条件:数据模型的组成部分约束数 据库中数据的语义 DBMS应提供定义数据库完整性约束条件, DBMS应提供定义数据库完整性约束条件,并把 应提供定义数据库完整性约束条件 它们作为模式的一部分存入数据库中
参照完整性检查
有以下四种情况: 有以下四种情况:
在SC表插入数据必须检查在Student表及Course表中是 SC表插入数据必须检查在Student表及Course表中是 表插入数据必须检查在Student表及Course 否存在对应主记录 在SC表修改数据必须检查在Student表及Course表中是 SC表修改数据必须检查在Student表及Course表中是 表修改数据必须检查在Student表及Course 否有对应主记录 在Student表及Course表中修改主码值时应注意SC表中 Student表及Course表中修改主码值时应注意SC表中 表及Course表中修改主码值时应注意SC 对应数据的修改 在Student表及Course表中删除记录时应注意SC表中对 Student表及Course表中删除记录时应注意SC表中对 表及Course表中删除记录时应注意SC 应数据的修改
删除触发器 删除触发器
<触发器名 触发器名> <表名 表名> Drop Trigger <触发器名> On <表名>
Create Table SC char( Null, (sno char(5)Not Null,
cno char(3)Not Null , char( smallint, grade smallint, Key(sno,cno), Primary Key(sno,cno), S(sno), Foreign Key(sno)References S(sno), Foreign Key(cno)References C(cno), )
过程块或存储过程
5.5 触发器
激活触发器
同一表上多个触发器激活时遵循的顺序: 同一表上多个触发器激活时遵循的顺序:
执行表上的Before触发器 执行表上的Before触发器 Before 激活触发器的SQL语句 语句 激活触发器的 执行表上的Alter触发器 执行表上的Alter触发器 Alter
违约处理: 违约处理:拒绝执行
5.3 参照完整性
Table中用check定义列级完整性 中用check 在Create Table中用check定义列级完整性 Create Table SC (sno char(5)Not Null, char( Null,
char( cno char(3)Not Null , grade smallint check((grade is null)or(grade 100)), between 0 to 100)), Key(sno,cno), Primary Key(sno,cno), S(sno), Foreign Key(sno)References S(sno), Foreign Key(cno)References C(cno), )