Oracle學習筆記(2)—約束延遲(constraints deffered)
Posted on 2006-07-14 14:41 心湖里的一條魚 閱讀(1328) 評論(1) 編輯 收藏 所屬分類: Oracle的狗窩約束延期是一個對主鍵、唯一鍵等約束進行延遲檢查的功能。可以使用該功能將約束檢查延遲到事務提交時,而不是在進行DDL操作之后立即進行檢查。所以對約束檢查也有這兩個選項:延遲和立即。
?比如對于表t_test
?Name Type???????? Nullable Default Comments
---- ------------ -------- ------- --------
NAME VARCHAR2(12) Y????????????????????????
AGE? NUMBER(5)??? Y????????????????????????
通過這個語句增加一個延遲檢查的主鍵約束:
alter table t_test add constraint pk_name primary key (name) DEFERRABLE INITIALLY DEFERRED;
執行如下操作:
SQL>insert into t_test values ('Tom',32);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from t_test;
NAME??????????? AGE
------------ ------
Tom??????? 32
SQL> insert into t_test values ('Tom',32);
1 row inserted
SQL> commit;
commit
ORA-02091: 事務處理已重算
ORA-00001: 違反唯一約束條件 (SCOTT.PK_NAME)
這個唯一約束條件的檢查時在commit時候進行檢查的,而不是在insert了違反約束條件的值之后馬上進行檢查。