Oracle一个事务中的Insert和Update执行顺序
2024-10-19 04:34:17
今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题。
首先详细说明下整个过程:
有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数据,然后再更新表B的两个字段,更新的两个字段是特定值。并且插入和更新在一个事务中。
有个需求需要在表A添加一个Insert的行级触发器,在触发器里,插入表A一行记录后去表B查看更新的两个字段是否满足特定条件,
如果表B的两个字段同时等于特定值,则把表A和表B的数据整合下放到表C。触发器的初衷就是这样。
可问题来了,测试触发器的时候,发现表B的两个字段总不能满足条件。查询下表B,发现表B的两个字段已经更新,并且两个都是特定值。新建测试窗口,插入表A一条测试记录,能在表C插入整合后的数据。
初步推断可能是在事务中,Insert语句先执行了,先触发了触发器,然后才进行表B的两个字段的更新。
所以就修改了Java代码事务中Insert语句和Update语句执行顺序,把Update语句放到Insert语句之前,结果还是一样,不能在表C插入整合后的数据。
后来在表B上面创建了一个Update触发器,禁用表A的Insert触发器,测试表B的Update触发器是发现当更新的两个字段满足特定条件后,去表A能查询到新插入的数据,能把整合后的数据插入到表C。
得出最终不成熟的结论:Oracle一个事务中,Insert语句比Update先执行。
最新文章
- Xml,Json,Hessian,Protocol Buffers序列化对比
- prototype 原型
- C#打开摄像头抓取照片然后退出
- Volly框架的使用基础版及使用中的一些坑 Ace 网络篇(三)
- java调用Http请求 -HttpURLConnection学习
- SLC、MLC和TLC三者的区别
- NOIP200902分数线划定
- Linux I/O Scheduler--CFQ(上)图解
- 201512读书分享——读《做自己的No.1》“哪一天”是永远不会到来的
- Windows server 2008 R2实现多用户远程连接
- 消息队列(Message Queue)基本概念(转)
- 网络性能测试工具Iperf/Jperf解读
- SQL SERVER 日期转换大全
- python实现批量压缩文件夹
- mysql 行转列 列转行
- vue 总结
- 常用gcc选项
- Leetcode笔记(整理中.......)
- 第十七次ScrumMeeting博客
- WebService 之 实例学习一