oracle如何处理多个用户在同一数据对象上执行的dml语句?假设,
如果有一个名为EMP(empname varchar2(30))
的空表,而用户“A
”会在其中输入
使用,
insert into emp values('A');
但尚未承诺。
如果另一个用户“B
”登录到同一个数据库提交,他/她是否会看到“A
”执行的dml操作(即A
'中的EMP
' {1}}表)?
非常感谢与此主题相关的其他方案/链接。 提前谢谢。
答案 0 :(得分:5)
在您提交之前,不会在会话之外看到事务。如果另一个用户登录,则他们将看到该表在其上次提交状态时存储在数据库中。这就是撤消空间,重做日志等的原因。在你的场景中,即使B已经提交了他,因此用户B也不会看到A的交易,因为A没有提交他们的更改。
答案 1 :(得分:1)
有关Oracle中数据并发和事务的完整详细信息,请参阅Oracle Concepts Guide。
答案 2 :(得分:1)
即使未提交,也可能会发生多次插入dml操作冲突。如果插入到上面的emp中是插入唯一索引的列(例如,主键),那么在提交或回滚之前,用户B不能插入相同的值 - 它将阻塞。因此,在某种意义上,用户B“看到”A的未提交插入,尽管用户B无法选择由A插入的值。