心湖里的一条小鱼——我的Java家园

没事就说说Java;有事就通过Java编程赚点生活费。
posts - 7, comments - 2, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

约束延期是一个对主键、唯一键等约束进行延迟检查的功能。可以使用该功能将约束检查延迟到事务提交时,而不是在进行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了违反约束条件的值之后马上进行检查。


评论

# re: Oracle学习笔记(2)—约束延迟(constraints deffered)  回复  更多评论   

2006-07-19 13:46 by 12
122

只有注册用户登录后才能发表评论。


网站导航: