Oracle Concurrent Insert

时间:2014-10-16 07:09:11

标签: sql oracle concurrency sql-insert

我们有简单的案例,如

 Create table t1 (c1 number primary);

会话1:

insert into t1 values (1); -- **session1 does not commit transaction**

会话2:

insert into t1 values (2);

session2是否挂起/等待session1提交/回滚事务,因为我们正在插入不同的值?

1 个答案:

答案 0 :(得分:1)

由于您要插入不同的值,会话2的插入的合法性在会话1上是独立的 - 因此它不会挂起,它只会成功(或者如果该值已经失败,则使用ORA-00001由于某种原因存在于表中。)

会话在这种用例中挂起的唯一情况是Oracle无法确定插入值是否会违反约束。例如,如果两个会话都插入了相同的值,则第一个会成功,第二个会挂起。如果第一个会话提交,则第二个会话将因ORA-00001错误而失败。如果第一个回滚,第二个将成功。