Posted on 2006-07-14 14:41
心湖里的一条鱼 阅读(1318)
评论(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了违反约束条件的值之后马上进行检查。