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.
Posted on 2008-09-11 at 下午 3:21 | Filed: 数据库 |
Entry RSS 2.0 feed |

Leave a Trackback |
Post a comment |

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

关于约束ENABLE NOVALIDATE的一个疑问的更多相关文章

  1. [20180713]关于hash join 测试中一个疑问.txt

    [20180713]关于hash join 测试中一个疑问.txt --//上个星期做的测试,链接: http://blog.itpub.net/267265/viewspace-2157424/-- ...

  2. ECMAScript prototype的一个疑问。

    既然是疑问 当然首先要贴一段代码. 背景: 探究js的原型继承模式. 疑惑:为何person1和person2的prototype 居然是相等的. 附: 1.Object.create(proto, ...

  3. [apue] 管道原子写入量的一个疑问

    PIPE_BUF定义了管道可原子写入的数据量,在我的系统(CentOS 6.7)上这个值是4096,写了个程序验证了一下,通过三个维度来考察: N: 生产者数量 M:每个生产者的生产次数 P:每次写入 ...

  4. 对SSL一个疑问的新理解

    看了很多关于Https/SSL的介绍,关于数字证书部分,我一直有个疑问:如果数字证书文件被别人拿到,那是不是就可以进行通讯了呢?如果这样,那整个安全机制就完全失去作用了.从开发的角度,我拿到别人的数字 ...

  5. C#中关于静态与非静态的一个疑问

    关于静态方法.变量和非静态方法.变量的区别,园里的大神早就有了许多详细的总结,个人觉得静态方法.变量与非静态方法.变量的区别可以总结为以下两句话: 静态的是属于类的 非静态是属于对象的 就是说调用静态 ...

  6. 关于过两级mux的时序约束的添加(一个非常经典的时序约束问题)

    非常开心自己的微信公众号: <数字集成电路设计及EDA教程> 关注者超过了1700 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具 ...

  7. 关于mysql5.6.13的一个疑问

    现在在做一个系统 使用了这么一个查询 select a.id,a.fdate,a.fbillno,e.fname as fwarehousename,a.fnote,c.fname as fsuppl ...

  8. iTunes Connect开发者指南中的一个疑问

    iTunes Connect Developer Guide     避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里? 大部分用户去应用页面下载 ...

  9. matlab的一个疑问?

    把逻辑值放入一个已知矩阵,为啥结果是:真就取矩阵的值,假就不取值? K>> aaaa=randi(10,10,2) aaaa = 6 3 10 4 6 7 5 2 6 3 8 2 1 2 ...

随机推荐

  1. ASP.NET MVC 认证模块报错:“System.Configuration.Provider.ProviderException: 未启用角色管理器功能“

    新建MVC4项目的时候 选 Internet 应用程序的话,出来的示例项目就自带了默认的登录认证等功能.如果选空或者基本,就没有. 如果没有,现在又想加进去,怎么办呢? 抄啊.将示例项目的代码原原本本 ...

  2. Git 少用 Pull 多用 Fetch 和 Merge 【已翻译100%】【转】

    本文转载自:https://www.oschina.net/translate/git-fetch-and-merge?lang=chs&page=1# 本文有点长而且有点乱,但就像Mark ...

  3. 【POJ 3076】 Sudoku

    [题目链接] http://poj.org/problem?id=3076 [算法] 将数独问题转化为精确覆盖问题,用Dancing Links求解 [代码] #include <algorit ...

  4. E20170815-mk

    frame  n. 框架; 边框; 眼镜框; 组织;

  5. lowbit( )运算

    --------开始-------- lowbit (n) 定义为非负整数n在二进制表示下“最低位的1及其后面所有的0构成的数值. 比如: n = 10 的二进制下为1010,则lowbit (n) ...

  6. 浅谈自学Python之路(day1)

    2018-02-19  17:15:14 Python语言相对于其他语言较为简洁,也相对好入门比如后面不加分号,基本见不着大括号等优点 第一个程序,也是学每门语言都需要掌握的第一个代码 print(& ...

  7. Django基础必备三件套: HttpResponse render redirect

    1. HttpResponse :  它的作用是内部传入一个字符串参数, 然后发给浏览器 def index(request): return HttpResponse('ok') 2. render ...

  8. [转]"RDLC"报表-参数传递及主从报表

    本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html 今天继续学习RDLC报表的“参数传递”及“主从报表” 一.先创建D ...

  9. jvm堆外直接内存实现高性能接入层

    jvm堆外直接内存实现高性能接入层https://blog.csdn.net/phil_code/article/details/69056086

  10. python--3、函数

    定义: 定义函数时,也相当于定义变量.会把函数体内的代码存入开辟的内存空间中.使用函数时,通过func() 声明是函数,其对应的值为代码.函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执 ...