insert into XYZ(col1, col2) values (1,2)
update XYZ set ... where col1 = 1
COMMIT
正如在上面的代码中看到的那样,我们尚未提交insert语句,并且我们在同一行上执行了更新操作,最后我们提交了整个批处理。
在这种情况下究竟会发生什么?在这种情况下是否有丢失数据的可能性?
答案 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期间保证数据完整性并用于提供读取的事务信息多个事务的一致性。