当前位置:文档之家› Oracle基础知识_第十二讲

Oracle基础知识_第十二讲


引用完整性约束
在关系型数据库中, 在关系型数据库中,不同的表可以依据其共同的列产 生关联关系,数据库需要确保数据遵从列关系的规则。 生关联关系,数据库需要确保数据遵从列关系的规则。 引用完整性规则,就是用于确保列关系的规则。 引用完整性规则,就是用于确保列关系的规则。
引用完整性约束( 引用完整性约束(续)
约束条件检查的设置( 约束条件检查的设置(续)
延迟开始( 延迟开始(initially deferred)与立即开始( )与立即开始( initially immediate) )
延迟开始,指的是在默认情况下, 延迟开始,指的是在默认情况下,只在事务处理结 束时强制使用的约束条件 立即开始,指的是在默认情况下,约束条件必须用 立即开始,指的是在默认情况下, 作即时约束,除非另外显示进行了设置 作即时约束,

使用set constraints … 语句可以对约束条件 使用 的检查进行设置
约束条件的检查
exceptions表 表
表EXCEPTIONS 记录着任何违反已启用约束的行 的信息 使用EXCEPTIONS表检测违反约束的数据 : 使用 表检测违反约束的数据
a. 如果尚未创建 如果尚未创建EXCEPTIONS,则通过运行 , utlexcpt.sql 脚本来创建例外表。 脚本来创建例外表。
d. 纠正错误。 纠正错误。
UPDATE table_name SET … WHERE rowid='...'
e. 截断 截断EXCEPTIONS 表,并重新执行 并重新执行ALTER TABLE 以启用约 束。 TRUNCATE TABLE system.exceptions;
ALTER TABLE table_name ENABLE VALIDATE CONSTRAINT const_name EXCEPTIONS INTO system.exceptions;
如何强制实现数据完整性
使用完整性约束的好处
声明即用 规则集中化 应用程序开发效率最大化 即时向用户反馈 性能优势 数据加载时的灵活性 对违反完整性的数据的识别
使用完整性约束的影响
将带来一定的性能损失 一般来说, 一般来说,完整性约束造成的性能损失与进行 约束检查所需执行的 SQL 语句大体相当
主键约束
包含于 PRIMARY KEY 完整性约束定义内的列被称为主键。 完整性约束定义内的列被称为主键。 表内的每行数据可以被唯一确定 表内不存在重复的数据行
主键约束( 主键约束(续)
Oracle 使用索引来强制实现 PRIMARY KEY 约束。 约束。 例如: 列上定义了主键约束, 例如:deptno 列上定义了主键约束,Oracle 的实现方式是隐式地创建索引 在此列上创建唯一索引( index) 在此列上创建唯一索引(unique index) constraint( 在此列上定义 NOT NULL constraint(约 束) 隐式创建的索引名称与主键约束名称相同。 隐式创建的索引名称与主键约束名称相同。
约束条件检查的设置
可延迟的( 可延迟的(deferrable)与不可延迟的(not )与不可延迟的( deferrable) )
可延迟的,指的是提交事务处理时才检查约束条件。 可延迟的,指的是提交事务处理时才检查约束条件。 如果在提交时检测到任何违反约束条件的情况, 如果在提交时检测到任何违反约束条件的情况,则会 回退整个事务处理 不可延迟的,又称为即时约束,是在每个DML语句结 不可延迟的,又称为即时约束,是在每个 语句结 束时强制执行的。 束时强制执行的。违反约束条件会导致语句的回滚 定义为“非延迟” 定义为“非延迟”的约束条件不能更改为延迟的约束 条件
完整性规则的类型( 完整性规则的类型(续)
引用完整性规则: 引用完整性规则:其作用是确保任意键值都能 与相关表的某一键值(即引用值)相匹配。 与相关表的某一键值(即引用值)相匹配。
复杂完整性检查
其作用是依据数据行的列值来允许或禁止插入, 其作用是依据数据行的列值来允许或禁止插入, 更新, 更新,或删除此数据行
引用完整性约束的规则( 引用完整性约束的规则(续)
check完整性约束 完整性约束
要求数据行满足用户定义的检查条件
检查条件
布尔表达式 子查询,序列,SYSDATE UID, ,SYSDATE, 子查询,序列,SYSDATE,UID,USER, USERENV 等 SQL 函数 LEVEL 或 ROWNUM 虚列
非空约束
默认情况下, 默认情况下,表的所有列都允许为空值 空值的含义是未输入值。 空值的含义是未输入值。 约束要求表列内只能包含非空值。 约束要求表列内只能包含非空值。
唯一性约束
key完整性约束要求列或列集的值唯一 完整性约束要求列或列集的值唯一, UNIQUE key完整性约束要求列或列集的值唯一, 数据表任意两行某列或某个列集的值不重复。 数据表任意两行某列或某个列集的值不重复。 Oracle 使用索引来强制实现唯一完整性约束 。
Exceptions表(续) 表
使用EXCEPTIONS表检测违反约束的数据 : 表检测违反约束的数据 使用
c. 使用 使用EXCEPTIONS 上的子查询定位包含无效数据的行 SELECT rowid, … FROM table_name WHERE ROWID in (SELECT row_id FROM system.exceptions) FOR UPDATE;
通过本章的学习,应达到: 通过本章的学习,应达到:
了解数据完整性的概念 了解完整性约束的类型 了解完整性约束的工作机制 知道如何管理和维护数据的完整性 知道如何查看完整性约束的相关信息
引用完整性约束的规则
限制:不允许对引用值进行更新与删除 限制 不允许对引用值进行更新与删除 置空:当引用值被更新或删除后 当引用值被更新或删除后, 置空 当引用值被更新或删除后,所有受影响的 依赖值都将被赋予一个默认值。 依赖值都将被赋予一个默认值。 当引用值被更新或删除后, 置默认值 :当引用值被更新或删除后,所有受影 当引用值被更新或删除后 响的依赖值都将被赋予一个默认值。 响的依赖值都将被赋予一个默认值。 串联操作:当引用值被更新后 当引用值被更新后, 串联操作 当引用值被更新后,所有受影响的依 赖值也将被更新为相同的值。当引用数据行( 赖值也将被更新为相同的值。当引用数据行( referenced row)被删除后,所有受影响的依 )被删除后, 赖数据行(dependent row)也将被删除。 赖数据行( )也将被删除。
第十二讲 数据完整性
二零一零年六月
目标
学习此章,需要掌握以下知识: 学习此章,需要掌握以下知识:
了解数据完整性的概念和作用 了解完整性约束的类型 了解完整性约束的工作机制 知道如何管理和维护数据的完整性 知道如何查看完整性约束的相关信息
概述
数据完整性是指数据库内的数据必须遵从的一 套预定义规则。 套预定义规则。 此规则是由数据库管理员或应用程序开发者确 定的。 定的。 Oracle 使用完整性约束防止用户向数据库的 基表中插入无效数据。 基表中插入无效数据。 完整性约束的作用是确保数据库内存储的信息 遵从一定的业务规则。 遵从一定的业务规则。
完整性规则的类型
空规则:定义在某一列上的规则, 空规则:定义在某一列上的规则,其作用是允 许或禁止将要被插入或更新的数据行此列的值 为空值( ),即没有值 为空值(null),即没有值 ), 唯一列值:其作用是确保将要被插入或更新的 唯一列值: 数据行此列(或列集) 数据行此列(或列集)的值是唯一的 主键值规则: 主键值规则:其作用是确保表内的每一数据行 都可以由某一个键值唯一地确定。 都可以由某一个键值唯一地确定。
创建约束
可以在创建表或修改表的时候创建约束
查看约束的信息
视图
DBA_CONSTRAINTS ALL_CONSTRAINTS USER_CONSTRAINTS DBA_CONS_COLUMNS ALL_CONS_COLUMNS USER_CONS_COLUMNS
描述 描述约束定义
描述约束中的列
总结
SQL> @?/rdbms/admin/utlexcpt.sql
b. 执行带有 执行带有EXCEPTIONS 选项的 选项的ALTER TABLE 语句。 语句。
ALTER TABLE table_name ENABLE VALIDATE CONSTRAINT const_name EXCEPTIONS INTO system.exceptions;
多重 CHECK 约束
多个, 多个,不受限制 不冲突
约束条件的状态
约束条件的状态( 约束条件的状态(续)
NOVALIDATE:不检查新数据和现有数据, DISABLE NOVALIDATE:不检查新数据和现有数据,因此 这些数据可能不符合约束条件。 这些数据可能不符合约束条件。 VALIDATE:如果约束条件处于此状态, DISABLE VALIDATE:如果约束条件处于此状态,则不允 许对有约束条件的列进行任何修改。 许对有约束条件的列进行任何修改。 NOVALIDATE:新数据符合约束条件, ENABLE NOVALIDATE:新数据符合约束条件,但现有数 据处于未知状态。 据处于未知状态。 VALIDATE:新数据与现有数据均符合约束条件。 ENABLE VALIDATE:新数据与现有数据均符合约束条件。 这是约束条件的典型状态和默认状态。 这是约束条件的典型状态和默认状态。
相关主题