zoukankan      html  css  js  c++  java
  • 约束的DEFERRABLE, NOT DEFERRABLE, INITIALLY IMMEDIATE 和 INITIALLY DEFERRED

    [ CONSTRAINT constraint_name ]
    { NOT NULL |
      NULL |
      CHECK ( expression ) [ NO INHERIT ] |
      DEFAULT default_expr |
      UNIQUE index_parameters |
      PRIMARY KEY index_parameters |
      REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
        [ ON DELETE action ] [ ON UPDATE action ] }
    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

     

    DEFERRABLE(可以推迟的约束检查):可以推迟到事务结尾。目前仅UNIQUE, PRIMARY KEY, EXCLUDE和FOREIGN KEY才支持DEFERRABLE。NOT NULL和CHECK约束不支持。

    NOT DEFERRABLE(不可推迟的约束检查):在每一个命令后会立即验证是否满足约束条件。缺省是NOT DEFERRABLE。

    如果约束是INITIALLY IMMEDIATE,那么每条语句之后就检查它。这个是缺省。

    如果约束是INITIALLY DEFERRED,那么直到事务完成才检查。 

     

    检查的时间可以用以下命令修改:

    SET CONSTRAINTS [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

     

    例子:

    • 默认是NOT DEFERRABLE INITIALLY IMMEDIATE

    create table t1 (id number, name char(10));

    alter table t1 modify id number primary key;

    SQL> insert into t1 values(1,'Tough1');
    已创建 1 行。

    SQL> insert into t1 values(1,'Tough1');
    insert into t1 values(1,'Tough1')
    *
    第 1 行出现错误:
    ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C005428)

     

    • DEFERRABLE或INITIALLY DEFERRED的情况:

    create table t2 (id number, name char(10));

    alter table t2 modify id number primary key INITIALLY DEFERRED;

    alter table t2 modify id number primary key DEFERRABLE INITIALLY DEFERRED;

    SQL> insert into t2 values(1,'Tough1');

    已创建 1 行。

    SQL> insert into t2 values(1,'Tough1');

    已创建 1 行。

    SQL> commit;
    commit
    *
    第 1 行出现错误:
    ORA-02091: 事务处理已回退
    ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C005435)

     


     

     

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/toughhou/p/3778798.html
Copyright © 2011-2022 走看看