禁用约束语法测试

对于Oracle db 外键约束,存在清理父表记录,可能会影响子表的现象,对于约束禁用,进行测试,禁用约束有两个参数选项
novalidate or validate 
禁用约束语法测试

1.禁用启用使用默认
SQL> insert into emp(empno,deptno) values(1221,88);
insert into emp(empno,deptno) values(1221,88)
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 未找到父项关键字
SQL> alter table EMP disable constraint FK_DEPTNO;
SQL> insert into emp(empno,deptno) values(1221,88);
SQL> alter table EMP enable constraint FK_DEPTNO;
alter table EMP enable constraint FK_DEPTNO
                                  *
第 1 行出现错误:
ORA-02298: 无法验证 (SCOTT.FK_DEPTNO) - 未找到父项关键字
说明默认enable 会检测数据是否满足条件

SQL> update emp set deptno=40 where deptno=20;
已更新5行。
SQL>  update emp set deptno=99 where deptno=10;
已更新3行。
说明默认disable 禁用约束后,行记录可以允许被修改

2.禁用启用使用 novalidate
alter table EMP disable novalidate constraint FK_DEPTNO;

SQL> insert into emp(empno,deptno) values(1221,88);
已创建 1 行。
SQL>  alter table EMP enable novalidate constraint FK_DEPTNO;
表已更改。
insert into emp(empno,deptno) values(1358,55)
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 未找到父项关键字
使用novalidate 选项,不会去检测历史记录是否满足限制条件,新记录产生效果。

3.禁用启用使用 validate 

alter table EMP disable validate constraint FK_DEPTNO;

SQL> update emp set deptno=40 where deptno=20;
update emp set deptno=40 where deptno=20
*
第 1 行出现错误:
ORA-25128: 不能对带有禁用和验证约束条件 (SCOTT.FK_DEPTNO)
的表进行插入/更新/删除

insert into emp(empno,deptno) values(1221,88)
*
第 1 行出现错误:
ORA-25128: 不能对带有禁用和验证约束条件 (SCOTT.FK_DEPTNO)
的表进行插入/更新/删除

即使约束禁用了!!! 但是历史记录还是无法update/insert/delete
alter table EMP disable novalidate constraint FK_DEPTNO;
SQL> insert into emp(empno,deptno) values(1221,88);
已创建 1 行。
alter table EMP enable validate constraint FK_DEPTNO;
alter table EMP enable validate constraint FK_DEPTNO
                                           *
第 1 行出现错误:
ORA-02298: 无法验证 (SCOTT.FK_DEPTNO) - 未找到父项关键字

原文地址:https://www.cnblogs.com/lvcha001/p/11039897.html

时间: 2024-10-18 18:27:01

禁用约束语法测试的相关文章

oracle 删除外键约束 禁用约束 启用约束

oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码 select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R' 禁用所有外键约束 Sql代码 select 'alter table '||table_name||' disable constraint

Oracle启动和禁用约束及删除违反约束的记录

一.禁用约束 alter table table_name disable novalidate constraint constraint_name 二.批量导入数据 三.在开启约束之前一定要检查违反约束的记录 1.执行Oracle中自带的脚本utlexpt1.sql创建exceptions表.该脚本在oracle_home/rdbms/admin目录下 sql>@oracle_home\rdbms\admin\utlexpt1.sql 2.执行带有exception是选项的alter语句,将

PostgreSQL 添加各种约束语法

转自 PostgreSQL 添加各种约束语法   1. 添加主键 alter table goods add primary key(sid); 2. 添加外键 alter table orders add foreign key(goods_id) references goods(sid)  on update cascade on delete cascade; on update cascade: 被引用行更新时,引用行自动更新: on update restrict: 被引用的行禁止更

Markdown语法测试说明

Markdown文法测试=====这篇文章主要是用来测试Markdown 文法的,如果一不小心写长啦,我就把它发布出来----- 以上是这篇文章的主标题和副标题,是用markdown的语法写出来的,个人觉得很赞!刚开始写的时候用的是文字两边加双线和单线的写法,很明显,是我搞错了!应该是将线加在文字的下面.这样,以后就不会在这个地方犯错了. 第二点,其实我不知道应该怎么换行,而且很明显我的输入法该换了,用搜狗输入法吧,因为现在我是在UBUNTU下敲这篇文章的,标题中的“一不小心写长啦”,其实我没有

3.HBase语法测试

登陆HBase ./hbase shell 2.创建 参数1:表   参数2:列族名称     参数3:列族名称 create 'user_info','base_info','extra_info' 3.查询库下边有哪些表 list 4.参数1:put相当于SQL里的insert into 语句 参数2:表名 参数3:表主键(可随意起名字)Hbase会转换成bayte数据进行排序 参数4:列族的名字冒号:后面列族下存的数据key 参数5:列族下存的key对应的value值 put 'user_

markdown语法测试文章

# 一级标题1个井号 ##二级标题2个井号 > 大括号是引号 [链接](http://www.cnblogs.com/ericcaowei) [图片]()

语法测试

# 这是一级标题 ## 这是二级标题 ### 这是三级标题 #### 这是四级标题 ##### 这是五级标题 ###### 这是六级标题 原文地址:https://www.cnblogs.com/xiaowenshu/p/12003623.html

Markdown语法测试

一句古话 先给一个引用的示例: 纸上得来终觉浅,绝知此事要躬行 --陆游 如何把大象放进冰箱 如何把大象放进冰箱: 打开冰箱 放进大象 关上冰箱 一段代码 下面是一段C代码: #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello worlld\n"); return 0; } 超链接 点击这里直达必应主页. 字体 这是斜体 这是粗体 最后来一张图片吧 下面是一张图片 原文地址:https://

你学会测试了吗(3):测试语法之断言介绍

前言 这个简短的系列一一讲解一下.Net下测试的相关知识,希望对初学者有所帮助. 在这个系列第一篇中从测试工具入手推荐TestDriven.NET.官方下载TestDriven.NET-2.14.2190 Beta版(直接下载)和TestDriven.NET-2.13.2184正式版(直接下载).第二篇中我选择了最为经典的NUnit单元测试框架来介绍TestDriven.NET所支持的一些重要的属性.这一篇继续使用这个框架,介绍单元测试的核心--断言Assert. 概述 在测试框架中,断言是单元