Oracle基础知识_第十二讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
约束条件检查的设置( 约束条件检查的设置(续)
延迟开始( 延迟开始(initially deferred)与立即开始( )与立即开始( initially immediate) )
延迟开始,指的是在默认情况下, 延迟开始,指的是在默认情况下,只在事务处理结 束时强制使用的约束条件 立即开始,指的是在默认情况下,约束条件必须用 立即开始,指的是在默认情况下, 作即时约束,除非另外显示进行了设置 作即时约束,
通过本章的学习,应达到: 通过本章的学习,应达到:
了解数据完整性的概念 了解完整性约束的类型 了解完整性约束的工作机制 知道如何管理和维护数据的完整性 知道如何查看完整性约束的相关信息
第十二讲 数据完整性
二零一零年六月
目标
学习此章,需要掌握以下知识: 学习此章,需要掌握以下知识:
了解数据完整性的概念和作用 了解完整性约束的类型 了解完整性约束的工作机制 知道如何管理和维护数据的完整性 知道如何查看完整性约束的相关信息
概述
数据完整性是指数据库内的数据必须遵从的一 套预定义规则。 套预定义规则。 此规则是由数据库管理员或应用程序开发者确 定的。 定的。 Oracle 使用完整性约束防止用户向数据库的 基表中插入无效数据。 基表中插入无效数据。 完整性约束的作用是确保数据库内存储的信息 遵从一定的业务规则。 遵从一定的业务规则。
约束条件检查的设置
可延迟的( 可延迟的(deferrable)与不可延迟的(not )与不可延迟的( deferrable) )
可延迟的,指的是提交事务处理时才检查约束条件。 可延迟的,指的是提交事务处理时才检查约束条件。 如果在提交时检测到任何违反约束条件的情况, 如果在提交时检测到任何违反约束条件的情况,则会 回退整个事务处理 不可延迟的,又称为即时约束,是在每个DML语句结 不可延迟的,又称为即时约束,是在每个 语句结 束时强制执行的。 束时强制执行的。违反约束条件会导致语句的回滚 定义为“非延迟” 定义为“非延迟”的约束条件不能更改为延迟的约束 条件
引用完整性约束的规则
限制:不允许对引用值进行更新与删除 限制 不允许对引用值进行更新与删除 置空:当引用值被更新或删除后 当引用值被更新或删除后, 置空 当引用值被更新或删除后,所有受影响的 依赖值都将被赋予一个默认值。 依赖值都将被赋予一个默认值。 当引用值被更新或删除后, 置默认值 :当引用值被更新或删除后,所有受影 当引用值被更新或删除后 响的依赖值都将被赋予一个默认值。 响的依赖值都将被赋予一个默认值。 串联操作:当引用值被更新后 当引用值被更新后, 串联操作 当引用值被更新后,所有受影响的依 赖值也将被更新为相同的值。当引用数据行( 赖值也将被更新为相同的值。当引用数据行( referenced row)被删除后,所有受影响的依 )被删除后, 赖数据行(dependent row)也将被删除。 赖数据行( )也将被删除。
使用set constraints … 语句可以对约束条件 使用 的检查进行设置
约束条件的检查
exceptions表 表
表EXCEPTIONS 记录着任何违反已启用约束的行 的信息 使用EXCEPTIONS表检测违反约束的数据 : 使用 表检测违反约束的数据
a. 如果尚未创建 如果尚未创建EXCEPTIONS,则通过运行 , utlexcpt.sql 脚本来创建例外表。 脚本来创建例外表。
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:新数据与现有数据均符合约束条件。 这是约束条件的典型状态和默认状态。 这是约束条件的典型状态和默认状态。
非空约束
默认情况下, 默认情况下,表的所有列都允许为空值 空值的含义是未输入值。 空值的含义是未输入值。 约束要求表列内只能包含非空值。 约束要求表列内只能包含非空值。
唯一性约束
key完整性约束要求列或列集的值唯一 完整性约束要求列或列集的值唯一, UNIQUE key完整性约束要求列或列集的值唯一, 数据表任意两行某列或某个列集的值不重复。 数据表任意两行某列或某个列集的值不重复。 Oracle 使用索引来强制实现唯一完整性约束 。
如何强制实现数据完整性
使用完整性约束的好处
声明即用 规则集中化 应用程序开发效率最大化 即时向用户反馈 性能优势 数据加载时的灵活性 对违反完整性的数据的识别
使用完整性约束的影响
将带来一定的性能损失 一般来说, 一般来说,完整性约束造成的性能损失与进行 约束检查所需执行的 SQL 语句大体相当
创建约束
可以在创建表或修改表的时候创建约束
查看约束的信息
视图
DBA_CONSTRAINTS ALL_CONSTRAINTS USER_CONSTRAINTS DBA_CONS_COLUMNS ALL_CONS_COLUMNS USER_CONS_COLUMNS
描述 描述约束定义
描述约束中的列
总结
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;
主键约束
包含于 PRIMARY KEY 完整性约束定义内的列被称为主键。 完整性约束定义内的列被称为主键。 表内的每行数据可以被唯一确定 表内不存在重复的数据行
主键约束( 主键约束(续)
Oracle 使用索引来强制实现 PRIMARY KEY 约束。 约束。 例如: 列上定义了主键约束, 例如:deptno 列上定义了主键约束,Oracle 的实现方式是隐式地创建索引 在此列上创建唯一索引( index) 在此列上创建唯一索引(unique index) constraint( 在此列上定义 NOT NULL constraint(约 束) 隐式创建的索引名称与主键约束名称相同。 隐式创建的索引名称与主键约束名称相同。
完整性规则的类型( 完整性规则的类型(续)
引用完整性规则: 引用完整性规则:其作用是确保任意键值都能 与相关表的某一键值(即引用值)相匹配。 与相关表的某一键值(即引用值)相匹配。
复杂完整性检查
其作用是依据数据行的列值来允许或禁止插入, 其作用是依据数据行的列值来允许或禁止插入, 更新, 更新,或删除此数据行
Exceptions表(续) 表
使用EXCEPTIONS表检测违反约束的数据 : 表检测违反约束的数据 使用
c. 使用 使用EXCEPTIONS 上的子查询定位包含无效数据的行 SELECTFra Baidu bibliotekrowid, … FROM table_name WHERE ROWID in (SELECT row_id FROM system.exceptions) FOR UPDATE;
引用完整性约束的规则( 引用完整性约束的规则(续)
check完整性约束 完整性约束
要求数据行满足用户定义的检查条件
检查条件
布尔表达式 子查询,序列,SYSDATE UID, ,SYSDATE, 子查询,序列,SYSDATE,UID,USER, USERENV 等 SQL 函数 LEVEL 或 ROWNUM 虚列
完整性规则的类型
空规则:定义在某一列上的规则, 空规则:定义在某一列上的规则,其作用是允 许或禁止将要被插入或更新的数据行此列的值 为空值( ),即没有值 为空值(null),即没有值 ), 唯一列值:其作用是确保将要被插入或更新的 唯一列值: 数据行此列(或列集) 数据行此列(或列集)的值是唯一的 主键值规则: 主键值规则:其作用是确保表内的每一数据行 都可以由某一个键值唯一地确定。 都可以由某一个键值唯一地确定。