[20190218]延迟约束问题2.txt --//当时遇到的问题,链接如下: http://blog.itpub.net/267265/viewspace-2122166/ => [20160716]主外键与延迟约束.txt http://blog.itpub.net/267265/viewspace-2122204/ => [20160719]主外键与延迟约束2.txt --//其它例子: http://blog.itpub.net/267265/viewspace-2138946/ => [20170512]延迟约束问题.txt --//当时因为开发没有在2个存在主外键上的表上建立约束,导致主表记录删除了,而外表数据还在. --//主要问题在于开发有需求要删除主表的记录,由于条件写错,导致出现以上情况. --//实际上oracle支持延迟约束,只有提交的时候才会检查。 我当时也很无奈,明显开发写代码有问题 --//什么能选择删除主记录,然后再插入回去这样的编程方式。 --//实际上查找这个问题就花了整整一天时间,确定恢复时间又花不少时间,恢复数据库到特定时间点又是一天。 --//更加严重事后根本没有总结,更谈不上更正编程方式。 --//实际上使用延迟约束,我个人认为更使用触发器一样,都不是很好的编程模式,再通过一个说明问题: 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production create table t(id number); alter table t add constraint pk_t primary key (id) deferrable initially deferred ; insert into t values (1); insert into t values (2); commit ; 2.测试: --//session 1: SCOTT@book(274,5)> insert into t values (1); 1 row created. SCOTT@book(274,5)> commit ; commit * ERROR at line 1: ORA-02091: transaction rolled back ORA-00001: unique constraint (SCOTT.PK_T) violated --//插入没有问题,但是提交会报错。因为违反唯一性约束,这时延迟约束的特点.继续测试: --//session 1: SCOTT@book(274,5)> update t set id=3 where id=2; 1 row updated. --//session 2: SCOTT@book(41,19)> update t set id=3 where id<=2; --//挂起!!因为修改都包括id=2的记录. --//session 1: SCOTT@book(274,5)> commit ; Commit complete. --//session 2: SCOTT@book(41,19)> update t set id=3 where id<=2; 1 row updated. --//注意仅仅修改1条。 SCOTT@book(41,19)> commit ; Commit complete. SCOTT@book(41,19)> select * from t; ID ---------- 3 3 --//破坏了唯一性约束. --//在12.2.0.2(for windows 64位)下测试结果也一样。
[20190218]延迟约束问题2.txt
来源:这里教程网
时间:2026-03-03 13:00:36
作者:
编辑推荐:
- [20190218]延迟约束问题2.txt03-03
- PL/SQL Developer 字体设置 完美(冷淡)配色方案03-03
- oradim工具恢复数据库03-03
- [20190215]那个更快(10g).txt03-03
- Oracle 19C 下载和安装03-03
- nid修改数据库名称03-03
- [20190219]那个更快(11g).txt03-03
- Linux 安装 Oracle 11g——手工建库(RAC)03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- PL/SQL Developer 字体设置 完美(冷淡)配色方案
PL/SQL Developer 字体设置 完美(冷淡)配色方案
26-03-03 - Oracle 19C 下载和安装
Oracle 19C 下载和安装
26-03-03 - Linux 安装 Oracle 11g——手工建库(RAC)
Linux 安装 Oracle 11g——手工建库(RAC)
26-03-03 - ORACLE RMAN备份--差异增量与累积增量的策略实例图
ORACLE RMAN备份--差异增量与累积增量的策略实例图
26-03-03 - 使用正则表达式对数字字符串字段排序
使用正则表达式对数字字符串字段排序
26-03-03 - [20190226]删除tab$记录的恢复6.txt
[20190226]删除tab$记录的恢复6.txt
26-03-03 - 为何Oracle Database 12R2输入正确的用户名密码口令验证依然不能通过?
- Oracle Data Guard 部署调试试验【一主一备/单机】
Oracle Data Guard 部署调试试验【一主一备/单机】
26-03-03 - Oracle的SCN显示问题
Oracle的SCN显示问题
26-03-03 - WRH$_ACTIVE_SESSION_HISTORY未自动清理导致SYSAUX空间过度增长的处理方法
