Oracle约束的关键字Enable/Disable/Validate/Novalidate
1?組合特性說明
| ? | Validate | Novalidate | ||
| 已有記錄 | 新增/刪除記錄 | 已有記錄 | 新增/刪除記錄 | |
| Enable | Yes | Yes | No | Yes |
| Disable | Yes | No | No | No |
Validate確保已有數據符合約束;
Novalidate不必考慮已有數據是否符合約束。
?
除非Novalidate被指定,Enable默認Validate;
除非Validate被指定,Disable默認Novalidate。
?
Enable Validate與Enable相同,檢查已有記錄和新增記錄,確保都符合約束;
Enable Novalidate?允許已有記錄不必滿足約束條件,但新增/修改的記錄必須滿足;
Disable Validate禁用約束,刪除約束上的索引,不允許修改任何被約束的記錄;
Disable Novalidate與Disable相同,禁用約束,刪除約束上的索引,且允許修改被約束的記錄。
2?建表
SQL> create table test(id int, name varchar2(10));
Table created
SQL> alter table test add constraint ck_id check(id > 10);
Table altered
3?測試1: Enable Validate
SQL> alter table test Enable validate constraint ck_id;
Table altered
SQL> insert into test values(5, 'Oracle');
insert into test values(5, 'Oracle')
ORA-02290:?違反檢查約束條件?(MYHR.CK_ID)
SQL> insert into test values(17,'ERP');
1 row inserted
SQL> commit;
Commit complete
4?測試2: Enable Novalidate
SQL> alter table test disable constraint ck_id;
Table altered
SQL> insert into test values(5, 'Oracle');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
???????????ID NAME
----------- ----------
??????????17 ERP
????????????5 Oracle
?
SQL> alter table test enable novalidate constraint ck_id;
Table altered
SQL> insert into test values(32, 'SAP');
1 row inserted
SQL> insert into test values(3, 'Linux');
insert into test values(3, 'Linux')
ORA-02290:?違反檢查約束條件?(MYHR.CK_ID)
SQL> commit;
Commit complete
5?測試3: Disable Validate
SQL> delete from test where id < 10;
1 row deleted
SQL> commit;
Commit complete
SQL> alter table test disable validate constraint ck_id;
Table altered
SQL> select * from test;
?????????????ID NAME
------------- ----------
?????????????17 ERP
?????????????32 SAP
SQL> update test set name = 'Change' where id = 17;
update test set name = 'Change' where id = 17
ORA-25128:?不能對帶有禁用和驗證約束條件?(MYHR.CK_ID)?的表進行插入/更新/刪除
6?測試4: Disable Novalidate
SQL> alter table test disable novalidate constraint ck_id;
Table altered
SQL> insert into test values(2, 'Linux');
1 row inserted
SQL> insert into test values(13, 'Windows');
1 row inserted
SQL> update test set name = 'Change' where id = 17;
1 row updated
SQL> commit;
Commit complete
SQL> select * from test;
??????????ID NAME
---------- ----------
??????????17 Change
??????????13 Windows
??????????32 SAP
???????????2 Linux
?
總結
以上是生活随笔為你收集整理的Oracle约束的关键字Enable/Disable/Validate/Novalidate的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle启用、禁用角色
- 下一篇: ORACLE11G自动维护任务简析