Oracle一个事务中的Insert和Update执行顺序
Posted 片刻的温馨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle一个事务中的Insert和Update执行顺序相关的知识,希望对你有一定的参考价值。
今天碰到了一个奇怪的问题,是关于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先执行。
以上是关于Oracle一个事务中的Insert和Update执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例