一、验证约束
1.验证约束
如果约束处于验证状态,则在定义或激活约束时,Oracle将对表中所有已有的记录进行验证,检查是否满足约束限制。
2.非验证约束
如果约束处于非验证约束,则在定义或激活约束时,Oracle将对表中已有记录不执行验证操作。
如果将禁止、激活、验证和非验证状态相互组合,则可以将约束分为4中状态,如下表:
状态 | 说明 |
激活验证状态 (ENABLE VALIDATE) | 默认状态。Oracle不仅对以后添加和更新的数据进行约束检查,也会对已经存在的数据检查约束 |
激活非验证状态 (ENABLE NOVALIDATE) | Oracle只对以后添加和更新的数据进行约束检查 |
禁止验证状态 (DISABLE VALIDATE) | Oralce对已经存在的数据检查约束,但是不允许对表执行添加和更新操作 |
禁止非验证状态 (DISABLE NOVALIDATE) | 无论是表中已存在的记录,还是以后添加和更新的操作,Oracle都不进行约束检查 |
切换约束状态的SQL语句:
ALTER TALBE table_name
MODIFY CONSTRAINT constraint_name [DIS|EN]ABLE [NO]VALIDATE;
二、延迟约束
在延迟约束下,Oralce对添加和更新的数据,不会立即执行约束检查,这样用户可以改变检查的时机,如将约束检查放在事务结束后进行。
INITIALLY DEFERRED | 约束的初始状态是延迟检查 |
INITIALLY IMMEDIATE | 约束的初始状态是立即检查 |
SQL语句:
ALTER TALBE table_name
MODIFY CONSTRAINT constraint_name INITIALLY [DEFERRAED | IMMEDIATE];
三、检查约束信息
1.USER_CONSTRAINTS中的约束信息
USER_CONSTRAINTS视图中部分列的说明
列 | 类型 | 说明 |
owner | VARCHAR2(30) | 约束的所有者 |
constraint_name | VARCHAR2(30) | 约束名 |
constraint_type | VARCHAR2(1) | 约束类型(P、R、C、U、V、O) |
table_name | VARCHAR2(30) | 约束所属的表 |
status | VARCHAR2(8) | 约束状态(ENABLE、DISABLE) |
deferrable | VARCHAR2(14) | 约束是否也延迟(DEFERRABLE、NOTDEFERRABLE) |
deferred | VARCHAR2(9) | 约束是立即执行还是延迟执行(IMMEDIATE、DEFERRED) |
2.USER_CONS_COLUMNS中的约束列
USER_CONS_COLUMNS视图中部分列的说明
列 | 类型 | 说明 |
owner | VARCHAR2(30) | 约束的所有者 |
constraint_name | VARCHAR2(30) | 约束名 |
table_name | VARCHAR2(30) | 约束所属的表 |
column_name | VARCHAR2(4000) | 约束所定义的列 |