什么是数据的完整性
所谓数据的完整性就是在数据库中符合公司商业规划的有效数据
有哪几种主要的方法来维护数据的完整性
Oracle的完整性约束,数据库触发器,应用程序代码
Oracle的完整性约束有哪些优点
!三种维护数据的完整性方法中只有oracle的完整性约束是oracle产品自带的
!oracle的完整性约束时强加在表上的规则或条件,当错误刚一出现时就能被oracle系统自动地发现,从而使数据库的开发和维护更加容易
Oracle系统提供了几种约束
非空约束,唯一约束,主键约束,外键约束,条件约束
完整性约束可能处在的4种状态
DISABLE NOVALIDATE(禁止而无效):不做任何约束多定义的检查
DISABLE VALIDATE(禁止而有效):表中由约束所限制的列不能做任何修改,约束上的索引将被删除,约束也将被禁止。
ENABLE NOVALIDATE(激活而无效):新的违反约束的数据不能输入到表中,但是表中可能包含违反约束的数据。
ENABLE VALIDATE(激活而有效):任何违反约束的数据行都不能插入到表中,不过可能有一些违反约束的数据行在约束时被禁止期间已经插入了表中,这样的数据行被称为例外,他们必须或者被修改或者被删除。
延迟性约束和非延迟性约束
延迟性约束:仅在每一个事务提交时进行数据完整性的检查,如果有数据违反了约束条件,整个事务将被回滚
非延迟性约束:要在每一个DML语句结束时进行数据完整性检查,如果有数据违反了约束条件,该语句将被回滚。
怎样定义延迟性约束
!将约束定义成Initial Immediate:除非显示的设置这一约束,否则约束默认功能与非延迟性相同
!将约束定义成Initial Deferred:约束默认功能就是在每一个事务结束时进行数据完整性检查。
怎样改变延迟状态
set constraint 用户名。约束名 deferred/immediate
不能修改任何非延迟性约束的延迟状态
怎样获得约束的信息
SELECT constraint_name,constraint_type,table_name,status,deferrable,deferred,validated
FROM dba_constraints
定义和维护约束时应该遵循的原则
!对于主键和唯一键
利用using index 子句将约束的索引放在(与表)不同的表空间中
如果经常有大规模数据的装入,使用非唯一索引
!对于自引用的外键
在初始装入数据之后再定义或开启外键
延迟约束的检查
关闭和开启约束的操作
关闭:alter table 用户名。表名
Disable novalidate constraint用户名。约束名
开启:alter table 用户名。表名
Enable validate constraint 用户名。约束名
怎样获得约束的状态信息
Select constraint_name,table_name,constraint_type,status,deferred,deferrable,validated
From dba_constraints
Where owner=‘用户名’
将一个约束设置为ENABLE VALIDATE状态时可能的操作步骤
当表中没有违反约束的数据行时,可以直接设置
当表中出现违反约束的数据行时,需要先把该约束行修改或删除,然后才能设置。具体步骤如下:
!通过运行utlexpt1。Sql脚本文件来建立exceptions表
!执行带有exceptions选项的alter table语句
!在exceptions表上使用子查询来锁定无效的数据行
!改正错误
!重新执行带有开启约束子句的alter table语句。
怎样将一个约束重命名
Alter table 用户名。表名
Rename constraint 旧名
To 新名
怎样删除一个约束
Alter table 用户名。表名
Drop constraint 约束名。