2010-07-07 38 views
1

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

如果有一个名为EMP(empname varchar2(30))和用户一个空表“A”让一个进入它

使用,

insert into emp values('A'); 

但还没有提交它。

如果登录到同一数据库的另一个用户B“承诺,将他/她看到了由“A‘(即,’A”在EMP表)进行DML操作?

与此主题相关的其他场景/链接将不胜感激。 在此先感谢。

回答

5

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

1

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

+0

感谢您的链接。 – ssr532 2010-07-08 06:13:26

1

即使未提交,多个插入dml操作也可能发生冲突。如果上面的插入插入到唯一索引的列(例如主键)中,则直到提交或回滚用户B不能插入相同的值 - 它将被阻塞。因此,从某种意义上说,用户B“看到”未由A提交的插入,尽管用户B不能选择由A插入的值。