`

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.
分享到:
评论

相关推荐

    disable/enable adb codes

    标题“disable/enable adb codes”指的是如何禁用或启用ADB服务,这在特定场景下可能是必要的,例如保护设备安全、避免不必要的数据传输或者在系统更新时防止意外干扰。本文将详细介绍如何禁用和启用ADB,并探讨其...

    M25P20, M25P40, M25P80, M25P16, M25P32, M25P64存储 SPI FLASH C语言驱动

    M25P20, M25P40, M25P80, M25P16, M25P32, M25P64存储 SPI FLASH C语言驱动源代码 ...//bit0:RIE=0 SPI reception interrupt disable SPICLKD=0x2C; //select frequency divider=0x2C SPICON0

    disable-enable.txt

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

    M25P20, M25P40, M25P80, M25P16, M25P32, SPI FLASH C语言软件驱动源码.zip

    //bit3:TEIE=0. SPI transmission end interrupt disable //bit2:RORIE=0. SPI receive overrun interrupt disable //bit1:TIE=0. SPI transmission interrupt disable //bit0:RIE=0 SPI ...

    source insight em文件

    2,快速disable/enable代码Macro: WangQiGuo_MultiLineComment : Ctrl+2 3,快速#if #endif代码Macro: WangQiGuo_CommentSelStr : Ctrl+3 4,代码格式化Astyle插件 View->Astyle 5, 函数声名信息,在文件中输入fu...

    LockScreenTest.rar "Home" button disable and enable

    标题中的“LockScreenTest.rar”很可能是一个用于测试锁屏功能的软件或应用的压缩包,而描述中的“"Home" button disable and enable”则指明这个测试着重关注设备的“Home”键的禁用和启用功能。这通常涉及到...

    ulps_enable_disable.zip

    标题 "ulps_enable_disable.zip" 暗示了这是一个与启用或禁用ULPS相关的软件配置包。ULPS,全称Ultra Low Power State(超低功耗状态),是计算机硬件,特别是显卡中的一种节能技术。它允许设备在不活动时进入一种极...

    ActiveX Compatilility Manager

    This utility allows you to easily disable/enable ActiveX components on Internet Explorer browser. It disables the desired ActiveX component by setting the "kill bit" of the desired CLSID under the ...

    ajax-loading-animation:jQuery和Zepto的简单ajax加载动画

    Ajax加载动画 一个简单的ajax加载动画,用于jquery和Zepto... //enable and disable listening ajax events loading . ajax ( true ) ; //enable loading . ajax ( false ) ; //disable //manual show the loading v

    enable_control_grp.zip_visual c

    描述中的“同时disable/enable一组控件”进一步明确了主题,这通常是用户界面编程中常见的需求,用于根据特定条件或用户交互来控制多个UI元素的状态。 在提供的压缩文件列表中,我们可以看到以下文件: 1. TestDlg...

    cool-php-captcha 0.3 验证码生成库代码.rar

    // Disable dictionary words //$captcha->wordsFile = 'words/es.txt'; // Enable spanish words //$captcha->session_var = 'secretword'; // Change session variable $captcha->CreateImage();

    How to disable_enable a timing check in a design.pdf

    后仿

    cool-php-captcha

     // Disable dictionary words//$captcha->wordsFile = 'words/es.txt'; // Enable spanish words//$captcha->session_var = 'secretword'; // Change session variable$captcha->CreateImage();

    无 adb disable-verity 命令的adb应用程序

    此adb中无adb disable-verity命令,如果在cmd中输入以上命令会报 /system/bin/sh: disable-verity: not found 的错误。具体可看本人的文章 ”/system/bin/sh: disable-verity: not found 的解决方案“ 【使用方式】...

    (免费)提供 adb -disable-verity 支持

    此adb工具包中包含了adb disable-verity命令,这里免费提供给大家使用,具体可看本人的文章 ”/system/bin/sh: disable-verity: not found 的解决方案“ 【使用方式】 platform-tools解压后即可使用。在cmd中通过cd...

    jquery.validate学习实例

    - **禁用/启用验证**:在某些情况下,你可能希望暂时禁用或启用验证,这可以通过调用`disable/enable`方法实现。 在这个"jquery.validate学习实例"中,`index.html`文件应该展示了一个包含`jQuery Validate`应用的...

    adb,支持adb disable-verity命令,解锁system分区

    `adb disable-verity` 是一个特定的adb命令,它涉及到Android系统的安全特性——verity模式。 verity模式是Android为了增强设备的安全性而引入的一种机制。它通过校验系统分区的哈希值来确保系统文件未被篡改,从而...

    vlmcsd-1113-2020-03-28-Hotbird64.7z

    If you do not use -N0 or -N1 to force disable/enable the NDR64 protocol, vlmcsd now uses the host build to decide if it uses NDR64 depending if a genuine KMS is using NDR64 on that build.

    cool-php-captcha.zip

     // Disable dictionary words //$captcha->wordsFile = 'words/es.txt'; // Enable spanish words //$captcha->session_var = 'secretword'; // Change session variable $captcha->CreateImage();

    enable disable home

    enable and disable "HOME" button in android 4.0.3 above the version 4.0.3,we should modify the frameworks detail is described in the Enable_Disable_Home.rar

Global site tag (gtag.js) - Google Analytics