oml中的多个用户/提交方案的dml

时间:2010-07-07 13:16:55

标签: database oracle concurrency transactions commit

oracle如何处理多个用户在同一数据对象上执行的dml语句?假设,

如果有一个名为EMP(empname varchar2(30))的空表,而用户“A”会在其中输入

使用,

insert into emp values('A');

但尚未承诺。

如果另一个用户“B”登录到同一个数据库提交,他/她是否会看到“A”执行的dml操作(即A'中的EMP' {1}}表)?

非常感谢与此主题相关的其他方案/链接。 提前谢谢。

3 个答案:

答案 0 :(得分:5)

在您提交之前,不会在会话之外看到事务。如果另一个用户登录,则他们将看到该表在其上次提交状态时存储在数据库中。这就是撤消空间,重做日志等的原因。在你的场景中,即使B已经提交了他,因此用户B也不会看到A的交易,因为A没有提交他们的更改。

答案 1 :(得分:1)

有关Oracle中数据并发和事务的完整详细信息,请参阅Oracle Concepts Guide

答案 2 :(得分:1)

即使未提交,也可能会发生多次插入dml操作冲突。如果插入到上面的emp中是插入唯一索引的列(例如,主键),那么在提交或回滚之前,用户B不能插入相同的值 - 它将阻塞。因此,在某种意义上,用户B“看到”A的未提交插入,尽管用户B无法选择由A插入的值。