zoukankan      html  css  js  c++  java
  • 关于约束ENABLE NOVALIDATE的一个疑问

    http://www.dbunix.com/?p=188

    关于约束ENABLE NOVALIDATE的一个疑问

    CREATE TABLE test
    (id varchar2(12),
    name varchar2(30) ,CONSTRAINT pk_test PRIMARY k
     
    ALTER TABLE test disable CONSTRAINT pk_test

    然后向表中插入两条完全一样的数据并commit

    我的印象是ENABLE NOVALIDATE并不检查已经存在的数

    SQL> ALTER TABLE test enable novalidate constra
    ALTER TABLE test enable novalidate CONSTRAINT p
    *
    ERROR 位于第 1 行:
    ORA-02437: 无法验证 (DBO.PK_TEST) - 违反主键

    参考hrb_qiuyb文章

    SQL> CREATE TABLE t(a INT,b varchar2(20));
     
    TABLE created.
     
    SQL> INSERT INTO t VALUES(1,'lijie');
     
    1 ROW created.
     
    SQL> ALTER TABLE t ADD constraints pk_t_a PRIMARY KEY(a);
     
    TABLE altered.
     
    SQL> SELECT constraint_name,constraint_type,STATUS FROM user_constraints
    WHERE TABLE_NAME='T';
     
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    PK_T_A                         P ENABLED
     
    SQL> SELECT index_name,uniqueness FROM user_indexes WHERE TABLE_NAME='T';
     
    INDEX_NAME                     UNIQUENES
    ------------------------------ ---------
    PK_T_A                         UNIQUE
     
    SQL> ALTER TABLE t disable constraints pk_t_a;
     
    TABLE altered.
     
    SQL> SELECT constraint_name,constraint_type,STATUS FROM user_constraints
    WHERE TABLE_NAME='T';
     
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    PK_T_A                         P DISABLED
    SQL> SELECT index_name,uniqueness FROM user_indexes WHERE TABLE_NAME='T';
     
    no ROWS selected
     
    SQL> INSERT INTO t VALUES(1,'tina');
     
    1 ROW created.
     
    SQL> ALTER TABLE t enable novalidate constraints pk_t_a;
    ALTER TABLE t enable novalidate constraints pk_t_a
    *
    ERROR at line 1:
    ORA-02437: cannot validate (TAOBAO.PK_T_A) - PRIMARY KEY violated

    这里问题是:primary key所依赖的唯一键索引起的.

    解决方法:

    SQL> CREATE TABLE t2 AS (SELECT * FROM t WHERE 1=0);
     
    TABLE created.
     
    SQL> CREATE INDEX ind_t2_a ON t2(a);
     
    INDEX created.
     
    SQL> INSERT INTO t2 VALUES(1,'lijie');
     
    1 ROW created.
     
    SQL> ALTER TABLE t2 ADD constraints pk_t2_a PRIMARY KEY(a);
     
    TABLE altered.
     
    SQL> SELECT constraint_name,constraint_type,STATUS FROM user_constraints
    WHERE TABLE_NAME='T2';
     
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    PK_T2_A                        P ENABLED
     
    SQL> SELECT index_name,uniqueness FROM user_indexes WHERE TABLE_NAME='T2';
     
    INDEX_NAME                     UNIQUENES
    ------------------------------ ---------
    IND_T2_A                       NONUNIQUE
     
    SQL> ALTER TABLE t2 disable constraints pk_t2_a;
     
    TABLE altered.
     
    SQL> SELECT constraint_name,constraint_type,STATUS FROM user_constraints
    WHERE TABLE_NAME='T2';
     
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    PK_T2_A                        P DISABLED
     
    SQL> SELECT index_name,uniqueness FROM user_indexes WHERE TABLE_NAME='T2';
     
    INDEX_NAME                     UNIQUENES
    ------------------------------ ---------
    IND_T2_A                       NONUNIQUE
     
    SQL> INSERT INTO t2 VALUES(1,'tina');
     
    1 ROW created.
     
    SQL> ALTER TABLE t2 enable validate  constraints pk_t2_a;
    ALTER TABLE t2 enable validate  constraints pk_t2_a
    *
    ERROR at line 1:
    ORA-02437: cannot validate (TAOBAO.PK_T2_A) - PRIMARY KEY violated
    SQL> ALTER TABLE t2 enable novalidate constraints pk_t2_a;
     
    TABLE altered.

    One Response to “关于约束ENABLE NOVALIDATE的一个疑问”

  • 相关阅读:
    【刷题】洛谷 P1501 [国家集训队]Tree II
    【刷题】BZOJ 2816 [ZJOI2012]网络
    【刷题】BZOJ 2049 [Sdoi2008]Cave 洞穴勘测
    【刷题】BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊
    【刷题】洛谷 P3690 【模板】Link Cut Tree (动态树)
    【刷题】BZOJ 2190 [SDOI2008]仪仗队
    【刷题】BZOJ 2005 [Noi2010]能量采集
    【刷题】BZOJ 3262 [HNOI2008]GT考试
    (74)Wangdao.com第十三天_Object 对象_属性描述对象
    (73)Wangdao.com第十二天_JavaScript consol 对象与控制台
  • 原文地址:https://www.cnblogs.com/seasonzone/p/4229164.html
Copyright © 2011-2022 走看看