约束disable/enable validate/novalidate 的区别

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战 本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。 阅读详情

约束disable/enable validate/novalidate 的区别

转发http://www.cnblogs.com/rootq/archive/2008/09/23/1297400.html

disable/enable validate/novalidate 的区别

启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束.
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据. 

禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.
disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.


环境:oracle 9i 9.0.1.0 for win,以上结论均测试通过.
例:disable validate约束后,执行update...操作提示:
ORA-25128: 不能对带有禁用和验证约束条件 (SYS.PK_EMP_01) 的表进行插入/更新/删除

=============================================================

今天看到一个关于enable novalidate的问题,以前书上看到过,但没仔细研究,趁此机会分析了一下,把结果发上来供大家参考.
首先对constraint的开启和关闭共有四种:enable validate;enable novalidate;disable validate;disable novalidate;
1,3没有什么好说的,2表示开启时不检查已存在数据,4表示不检查今后的数据.
为此做如下测试:
1.首先创建测试表
create table a (no number(5),name varchar2(10));
insert into a values(1,'ss');
alter table a add constraint pk_a primary key(no);

create table b (no number(5),name varchar2(10));
insert into a values(1,'ss');
ALTER TABLE b ADD CONSTRAINT fk_a_b
FOREIGN KEY (no)
REFERENCES a (no);

2.测试fk
SQL> insert into b values(2,'sd');
insert into b values(2,'sd')
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.FK_A_B) violated - parent key not found
为此使用
SQL> alter table b disable novalidate constraint fk_a_b;

Table altered.

insert into b values(2,'sdd')
SQL> /

1 row created.
SQL> alter table b enable novalidate constraint fk_a_b;

Table altered.
从上面测试结果可见enable novalidate和disable novalidate在fk等约束是好用的.
3.测试pk
SQL> alter table a disable novalidate primary key;

Table altered.
SQL> insert into a values(1,'sd');

1 row created.

SQL> commit;

Commit complete.

SQL> alter table a enable novalidate primary key;
alter table a enable novalidate primary key
*
ERROR at line 1:
ORA-02437: cannot validate (SYSTEM.SYS_C001578) - primary key violated
在pk测试中enable novalidate不能使用了.
看到kamus的解释说是enable novalidate主键必须是唯一.
查了下相关资料,没有发现上述说明,但是找到一个下面的说法:
Primary and unique keys must use nonunique indexes
从新做测试
4.测试pk(2)
SQL> alter table a disable novalidate primary key;

Table altered.
这时我去检查表a,发现主键对应的索引pk_a不在了.
手工创建索引
SQL> create index i_a on a(no);

Index created.

SQL> alter table a enable novalidate primary key;

Table altered.
居然成功了.

结论:
从上面的测试结果看出,novalidate在非pk;un时可以正常工作.
在对pk;un使用时需要先创建相关索引,再使用novalidate.

 

2012.7.10 更新:语法novalidate对添加主键约束不起作用 (转)

 

最近在看tom的《Effective Oracle by design》,其中第6章6.3.8节有个例子是给表添加主键,但是不想对已经存在的数据进行校验:
alter table dept add constraint dept_pk primary key(deptno) rely enable novalidate;

 

我经过测试,发现即使加上novalidate语法也还是要检验的,测试如下:

 

SQL> create table aaa as select * from all_users;

 

Table created

 

SQL> insert into aaa select * from aaa;

 

29 rows inserted

 

SQL> alter table aaa add constraint pk_aaa primary key(username) rely enable novalidate;

 

alter table aaa add constraint pk_aaa primary key(username) rely enable novalidate

 

ORA-02437: 无法验证 (SMS.PK_AAA) - 违反主键

 

该测试在8.1.7.4、9.2.0.6、10.2.0.1中结果都一样,测试外键、check约束也都没有问题,就是主键不行!

 


最后发现问题所在:

 

创建主键时系统缺省还要同时创建一个唯一索引,novalidate只是使主键约束不对已经存在的数据
进行检验,并不对创建唯一索引进行控制,所以导致失败。可以在创建主键前先给该字段建个普通
非唯一索引,这样建主键时系统就会自动利用这个普通索引了。

 

SQL> create index ind_aaa on aaa(username);

 

Index created

 

SQL> alter table aaa add constraint pk_aaa primary key(username) rely enable novalidate;

 

Table altered

 


测试一下效果:

 

SQL> insert into aaa (username) values ('SYS');

 

insert into aaa (username) values ('SYS')

 

ORA-00001: 违反唯一约束条件 (SMS.PK_AAA)

 更新:enable novalidate 和 validate的用处

http://zhaolinjnu.blog.sohu.com/35664664.html

 

SQL> create table t(id number);

 

Table created.

 


SQL> create index idx_t_id on t(id) online;

 

Index created.

 

ENABLE VALIDATE specifies that all old and new data also complies with the
                constraint. An enabled validated constraint guarantees that all data is and will
                continue to be valid.
                If any row in the table violates the integrity constraint, the constraint remains
                disabled and Oracle returns an error. If all rows comply with the constraint,
                Oracle enables the constraint. Subsequently, if new data violates the constraint,
                Oracle does not execute the statement and returns an error indicating the
                integrity constraint violation.

 

SQL> select * from t;

 

        ID
----------
         1
         2
         2

 

SQL> commit;

 

Commit complete.

 

SQL> alter table t add constraint pk_t_id primary key(id)
  2  enable validate; 
alter table t add constraint pk_t_id primary key(id)
                             *
ERROR at line 1:
ORA-02437: cannot validate (TEST.PK_T_ID) - primary key violated

 

--enable validate会校验表中已有的数据是否违背此约束

 

ENABLE NOVALIDATE ensures that all new DML operations on the constrained
                  data comply with the constraint. This clause does not ensure that existing data
                  in the table complies with the constraint and therefore does not require a table
                  lock.

 

SQL> alter table t add constraint pk_t_id primary key(id)
  2  enable novalidate;

 

Table altered.

 

这个过程因为不校验以前的数据是否违反此约束,只对新数据校验,所以在业务不繁忙的时候,阻塞DML查询的时间将会非常短暂。

 

SQL> insert into t values(1);
insert into t values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (TEST.PK_T_ID) violated

 


SQL> insert into t values(3);

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> select * from t;

 

        ID
----------
         1
         2
         2
         3
--enable novalidate参数的含义是不检查表中已有的数据是否违反约束,但对新插入的数据会检查

 

If you specify neither VALIDATE nor NOVALIDATE, the default is VALIDATE.

 

If you change the state of any single constraint from ENABLE NOVALIDATE to
ENABLE VALIDATE, the operation can be performed in parallel, and does not block
reads, writes, or other DDL operations.

 

SQL> delete from t where id=2;

 

2 rows deleted.

 

SQL> commit;

 

Commit complete.

 

SQL> alter table t modify constraint pk_t_id validate;

 

Table altered.

 

通过上面的这种将一条创建主键的语句变成多条语句
1.create index idx_t_id on t(id) online compute statistics;
2.alter table t add constraint pk_t_id primary key(id) 
  enable novalidate; 

 

补充:如果是加唯一约束,则用下面的语法:

 

 alter table table_name add constraint uk_table_name unique(column_name...)
 enable novalidate;    
3.检查表中重复的主键的行
4.alter table t modify constraint pk_t_id validate;

 

备注:加enable参数的时候,才会阻塞DML语句

这种思路对生产环境有很重要的意义         


[VT虚拟化驱动]安装DPC回调检测CPU对VT的支持 文章目录前言一、驱动基本框架二、安装DPC回调三、检测CPU对VT的支持本章代码def.h:DriverEntry.cpputil.cpp 前言 对于VT的介绍网上有很多详细的介绍,这里不再赘述,只需要知道它有比操作系统还高的权限,可以利用这一点进行某些操作,如内存隐藏, 无痕HOOK ,MSR HOOK, 调试或者反调试, 这里直奔主题 一、驱动基本框架 虚拟机设置里虚拟化引擎设置: 新建一个空的WDM工程,平台设置为x64平台,右键属性——>Inf2Cat——>Run Inf2Cat设置 阅读详情

相关推荐

【AI生成】市面上主流自组网厂家的技术及市场研究

经过对全球自组网产业技术特征与市场格局的系统分析,本文得出以下核心结论:技术演进呈现智能化与融合化双轨路径 当前自组网技术创新已突破传统组网架构局限,形成"协议优化-架构创新-场景适配"的递进式发展路径。国际厂商聚焦智能算法应用,如Silvus采用深度学习实现动态拓扑优化,传输时延较传统方案降低37%;国内企业则侧重异构网络融合,中国移动设计院提出的5G LAN架构使工业场景通信可靠性提升至99.99%。

qq_31310977的博客 1696

Oracle约束状态,Oracle constraint enable validate约束状态练习

一、简述Oracle约束状态由四个选项决定:enable、disable、validate、invalidate,其中validateor invalidate状态效果依赖于enable or disable。disable novalidate 既不会约束新增数据也不会验证已有数据disable validate 启用后禁止DMLenable novalidate 约束新增数据但不会验证已有数据...

weixin_36368932的博客 654

直流有刷电机控制 - 认识电机(一)

电机控制学习

u011030644的博客 917

ENABLE VALIDATE、ENABLE NOVALIDATE、DISABLE VALIDATE、DISABLE NOVALIDATE

一、状态 disable/enable对新的数据是否检查约束条件, validate/invalidate对表中已有的旧数据是否校验约束条件。二、启用、禁用约束 启用约束...

294

11、rsa-目标主机支持RSA密钥交换【原理扫描】的漏洞

通过将 etcd 的 TLS 密钥交换算法从 RSA 升级为 ECDHE,可实现前向保密,彻底消除 “私钥泄露导致历史流量解密” 的风险。核心步骤是通过强制启用含ECDHE的套件,并禁用 RSA 密钥交换套件,同时建议升级到 TLS 1.2+ 并优化证书类型(优先 ECDSA)。这一配置符合云原生安全最佳实践,也是 Kubernetes 等依赖 etcd 的系统推荐的安全标准。生成临时密钥的具体步骤是什么?如何验证etcd是否已成功更新为ECDH密钥交换算法?配置临时密钥交换算法可能带来哪些性能影响。

xuebo1129927648的博客 1万+

无人自行车平衡控制:最小二乘法动态零点拟合实践

本文探讨了无人自行车平衡控制中动态零点的重要性及实现方法。通过最小二乘法拟合车头角度与ROL值的线性关系,解决了固定零点在转向时导致的稳定性问题。实践表明,动态零点拟合能显著提升系统平衡稳定性并降低能耗。

uran的专栏 660

Oracle数据库Constraint的ENABLE和VALIDATE子句

本文实际是探索Oracle数据库Constraint的两个子句(clause):ENABLE和VALIDATE的组合。

In-Memory Computing Technology 1083

KF-gins输出结果绘图

KF-gins输出结果绘图

m0_51977577的博客 1107

oracle enable关键字,Oracle之表示约束状态的关键字Enable/Disable/Validate/Novalidate

1组合特性说明Enable/Disable和Validate/Novalidate这两组关键字修饰的都是同一个对象,即constraint这种类型的对象。Validate的作用: 确保已有数据符合约束;Novalidate的作用:不必考虑已有数据是否符合约束。由此可以看出,Validate和Novalidate的不同点在于表中已有数据的作用上:Validate验证已有数据是否符合约束;N...

weixin_31109487的博客 855

081、空间降噪(Spatial Denoise)实战:双边滤波、非局部均值与BM3D在ISP中的调优

调参时,别只看PSNR/SSIM。找几个典型场景(夜景、人像、文字、天空),在真实设备上肉眼对比。我见过PSNR涨了2dB但图像看起来更差的案例——因为PSNR不惩罚纹理丢失。空间降噪这块,理论说再多,不如动手调一次。下次遇到噪点问题,先别急着上BM3D,试试双边滤波的自适应参数,说不定有惊喜。

zzfmlxs的博客 46

出现 Error:Unable to access jarfile xxxx\target\nacos-server.jar 解决方法

Nacos中的 2.x执行步骤如上,如果需要安装下载1.x版本,执行该步骤之后 自动更新下载的是2.x版本 对此如果需要下载安装1.x的版本,可通过如下连接(windows版本)

码农研究僧的博客 5699

enable validate deferrable

<br />enable/disable validate/novalidate<br /> 以上两项都是对约束的设置选项<br /><br /> enable/disable   <br /> 针对新插入/更新的数据进行/不进行约束验证,默认enable。<br /> enable时,如果是主键或唯一键,首先查看列上是否有索引,如果有就用。没有就新建。<br /> disable时,如果是主键或唯一键,会删除enable时新建的索引,但自定义索引不受影响。<br /><br /> valida

priestmoon的专栏 1093

uniapp - 最新实现APP连接使用MQTT流程及源码教程,uniapp app端接入mqtt发布订阅和接收消息队列传送消息、断开重连等各种示例代码(完美兼容安卓Android与苹果ios手机)

uniapp app端接入mqtt示例代码教程,uni-app中使用mqtt,uniapp安卓app接入mqtt,uniApp苹果ios集成MQTT教程,uniapp vue3 mqtt app端的接入流程,uniapp开发安卓和ios如何在项目里集成mqtt,Mqtt协议,uniapp开发APP,主动连接mqtt,订阅消息,实现发布,订阅和接收消息,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,搭建MQTT通讯做聊天项目,uniapp与设备通信 通过mqtt实现

🏆 前端领域优质创作者 6570

Oracle约束的关键字Enable/Disable/Validate/Novalidate

enable/disable对未来的数据有约束/无约束。 validate/novalidate对已有的数据有约束/无约束。    约束有如下四种状态  (1)ENABLEVALIDATE:约束在创建时,默认就是此状态。此状态会“检查表中原有行和新插入的行”。  (2)ENABLENOVALIDATE:不能输入违反约束的新数据。但是,在创建约束时,并不检查表中原有行。  (3)DIS...

wolovedaima123的博客 1286

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Constraint State(disable/enable validate/noalidate)

At any time, every constraint is either enabled or disabled, and validated or notvalidated. Any combination ...

congdao9826的博客 176

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

有重复数据的表添加唯一索引

约束分为几种状态validate/novalidate,enable/disable,可以通过alter table .. modify constraint ....enable/disable validate/noval...

cuanchou3489的博客 614

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

disable/enable validate/novalidate 的区别

启用约束: enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束. enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据. 禁用约束: disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作. disable validate :关闭约束,删除索引...

abc123098098的博客 141

disable/enable validate/novalidate 的区别 (ORACLE)

启用约束: enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束. enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据. 禁用约束: disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作. disable validate :关闭约束,删除索引,不能对表

Angiexia的专栏 5424

oracle constraint 约束 状态 详解

1.约束一共有四种状态a、enable validate-要求新旧数据必须同时满足约束规则-在规则正在进行中时是不容许在表上进行任何 DML 操作的 b、enable novalidate-已存在数据可以不满足,但是新数据必须满足 c、disable validate-不容许在表上进行任何 DML 操作,对主键和唯一约束来说,会删除相应的唯一索引,但 约束规则仍然有效 d、disable no

大慧博客 2348

oracle设置约束状态,Oracle约束的状态及验证机制

一、Oracle约束的状态Oracle完整性约束的状态有4种,分别是ENABLE、DISABLE、VALIDATE、NOVALIDATE。ENABLE 表示Oracle将检查要插入或更新的数据库中的数据是否符合约束;DISABLE 表示表中可以存放违反约束的行;VALIDATE 表示数据库验证表中的已存在数据是否符合约束;NOVALIDATE 表示数...

weixin_35348182的博客 951

disable/enable validate/novalidate的区别

oracle disable/enable validate/novalidate的区别

清风小阁 1528

OCP-1Z0-052-V8.02-10题

10. Examine the following statement that is used to modify the constraint on the SALES table: SQL> ALTER TABLE SALES MODIFY CONSTRAINT pk DISABLE VALIDATE; Which three statements are true regard

一抹曦阳-Oracle 1万+
上一篇: 实验一 Oracle Database环境和SQL *Plus基础
下一篇: 游标的概念和作用
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值