ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Deferrable constraints

Deferrable constraints

原创 Linux操作系统 作者:dragondb 时间:2019-05-28 20:06:08 0 删除 编辑
对deferrable constraints可定义其检查为immediate or deferred......

SQL> create table t1(c1 number);

Table created

SQL> alter table t1 add constraint chk_t1 check(c1>5) not deferrable;

Table altered

SQL> create table t2(c1 number);

Table created

SQL> alter table t2 add constraint chk_t2 check(c1>5) deferrable initially immediate;

Table altered

SQL> create table t3(c1 number);

Table created

SQL> alter table t3 add constraint chk_t3 check(c1>5) deferrable initially deferred;

Table altered

SQL> insert into t1 values(1);

insert into t1 values(1)

ORA-02290: check constraint (TEST.CHK_T1) violated

SQL> insert into t1 values(6);

1 row inserted

SQL> rollback;

Rollback complete

SQL> insert into t2 values(1);

insert into t2 values(1)

ORA-02290: check constraint (TEST.CHK_T2) violated

SQL> insert into t2 values(6);

1 row inserted

SQL> rollback;

Rollback complete

SQL> insert into t3 values(1);

1 row inserted

SQL> insert into t3 values(6);

1 row inserted

SQL> commit;

commit

ORA-02091: transaction rolled back
ORA-02290: check constraint (TEST.CHK_T3) violated

对deferrable constraint 可在会话级定义check type;

SQL> alter session set constraint=immediate;

Session altered

SQL> insert into t1 values(1);

insert into t1 values(1)

ORA-02290: check constraint (TEST.CHK_T1) violated

SQL> insert into t2 values(1);

insert into t2 values(1)

ORA-02290: check constraint (TEST.CHK_T2) violated

SQL> insert into t3 values(1);

insert into t3 values(1)

ORA-02290: check constraint (TEST.CHK_T3) violated

会话级优先

SQL> alter session set constraint=deferred;

Session altered

SQL> insert into t1 values(1);

insert into t1 values(1)

ORA-02290: check constraint (TEST.CHK_T1) violated

SQL> insert into t2 values(1);

1 row inserted

SQL> commit;

commit

ORA-02091: transaction rolled back
ORA-02290: check constraint (TEST.CHK_T2) violated

SQL> insert into t3 values(1);

1 row inserted

SQL> commit;

commit

ORA-02091: transaction rolled back
ORA-02290: check constraint (TEST.CHK_T3) violated

SQL> set constraint chk_t1 deferred;

set constraint chk_t1 deferred

ORA-02447: cannot defer a constraint that is not deferrable

SQL> set constraint chk_t2 deferred;

Constraints set

SQL> insert into t2 values(1);

1 row inserted

SQL> commit;

commit

ORA-02091: transaction rolled back
ORA-02290: check constraint (TEST.CHK_T2) violated

SQL> set constraint chk_t3 immediate;

Constraints set

SQL> insert into t3 values(1);

insert into t3 values(1)

ORA-02290: check constraint (TEST.CHK_T3) violated

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/45259/viewspace-134932/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: using index
请登录后发表评论 登录
全部评论

注册时间:2003-05-05

  • 博文量
    98
  • 访问量
    94093