在最终提交之前更新新创建的行

时间:2009-09-14 13:03:40

标签: sql oracle plsql

insert into XYZ(col1, col2) values (1,2)
    update XYZ set ... where col1 = 1
    COMMIT

正如在上面的代码中看到的那样,我们尚未提交insert语句,并且我们在同一行上执行了更新操作,最后我们提交了整个批处理。

在这种情况下究竟会发生什么?在这种情况下是否有丢失数据的可能性?

5 个答案:

答案 0 :(得分:5)

您的会话始终能够看到自己的修改,甚至在您发布提交之前

答案 1 :(得分:1)

新插入的行将更新。

你可以“丢失数据”的唯一方法是在提交之前中断,在这种情况下根本不会发生任何操作

答案 2 :(得分:0)

文森特的回应中的重要词汇是“你的会话”。

单独的会话只会在您提交之前看到未修改的数据。这是读一致性的一部分。

根据您使用的框架和工具,您的会话可能会在执行更新时锁定记录,从而阻止其他会话更新,直到您提交或回滚。

答案 3 :(得分:0)

有关进一步阅读,请参阅优秀Oracle概念指南10gR2的“数据并发和一致性”部分的链接

http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm

答案 4 :(得分:0)

Infact所有事务都存储在Rollback Segmant中,并且存储在该特定实例的表空间内存中。回滚段是表空间中的一个存储空间,用于保存用于在ROLLBACK期间保证数据完整性并用于提供读取的事务信息多个事务的一致性。