enable validate/novalidate 以及 disable validate/novalidate
来源:互联网 发布:c语言的排序算法 编辑:程序博客网 时间:2024/05/22 08:37
其实这个东西网上一搜一大堆,总结出来就是两句话:
启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束,validate关键字可省略。
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据。
禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作,novalidate关键字可省略。
disable validate :关闭约束,删除索引,不能对表进行插入/更新/删除等操作。
其实,我们经常遇到的就是 enalbe validate ,这个是创建约束的时候最常用到的。而disable novalidate是我们禁用约束时候经常用到的。所以我们来试试剩下两个的效果。
我们首先来创建一个测试表
create table TEST (ID number) ;
好,现在来测试disable validate,这个约束一旦加上,则表不能进行DML操作,所以我们现在直接对刚才的创建的表添加这个约束。
alter table TEST add constraint pk_test_id primary key(ID) disable validate
现在我们插入一条数据
insert into TEST (ID) values (1);
结果如下:
ORA-25128: 不能对带有禁用和验证约束条件 (CQZF.PK_TEST_ID) 的表进行插入/更新/删除
结果非常明显了吧。现在,我们试试enable novalidate.
首先,我们把现在TEST表的约束修改成disable并插入两个相同ID的数据。
alter table TEST disable novalidate constraint pk_test_id;
insert into TEST (ID) values (1);
1 row inserted
insert into TEST (ID) values (1);
1 row inserted
commit;
现在再把约束修改为enable novalidate
alter table TEST enable novalidate constraint pk_test_id;
结果是
ORA-02437: 无法验证 (CQZF.PK_TEST_ID) - 违反主键
按照最上面所说的,enable novalidate不是不校验已经存在的数据吗?难道不是?
其实呢,enable novalidate确实不会校验已经存在的数据,出现这个报错,是因为创建约束的时候,会随着创建一个唯一索引,而已经存在的数据为了唯一索引的约束。所以我们先针对ID字段创建一个普通索引
create index i_test_id on TEST(ID) ;
Index created
OK,现在我们再执行
alter table TEST enable novalidate constraint pk_test_id;
Table altered
成功。
- enable validate/novalidate 以及 disable validate/novalidate
- Enable/Disable/Validate/Novalidate
- disable/enable validate/novalidate的区别
- disable/enable validate/novalidate 的区别
- disable/enable validate/novalidate 的区别 (ORACLE)
- disable/enable validate/novalidate 的区别
- 约束disable/enable validate/novalidate 的区别
- disable/enable validate/novalidate 的区别
- Oracle约束的关键字Enable/Disable/Validate/Novalidate
- Oracle约束的关键字Enable/Disable/Validate/Novalidate
- Oracle约束的关键字Enable/Disable/Validate/Novalidate
- Oracle约束的关键字Enable/Disable/Validate/Novalidate
- oracle 9i 把表read only?oracle中的 CONSTRAINT 属性ENABLE DISABLE VALIDATE NOVALIDATE
- Oracle之表示约束状态的关键字Enable/Disable/Validate/Novalidate
- Oracle 约束enable/disable novalidate
- 误删唯一索引的补救enable validate|novalidate
- 约束constraint的 enable/disable novalidate总结
- Oracle PL/SQL之ENABLE NOVALIDATE约束
- android JNI调用C/C++
- from认证
- 删除/var/lib/mysql-bin.000*文件 (二进制更新文件)导致mysql无法启动
- 【C语言】malloc()和free()函数的讲解以及相关内存泄漏问题
- 搭建本地yum源+gcc
- enable validate/novalidate 以及 disable validate/novalidate
- Android Notifications通知
- Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastor
- Windows 强制删除文件及文件夹命令
- MySql数据库的列类型(字段类型)
- RHEL 5 建立YUM 安装仓库
- MFC控制子线程退出的基本思路比较
- android 调用指定浏览器
- 鸿海碳纳米管触控面板或华为、酷派等采用