我有两个疑问
1.delete from x;
2.delete from x where y='a'
甲骨文11g对上面的查询提供什么类型的锁?
假设我们在一个程序中迭代下面的查询
delete from x where y='$a'
让我们有一个编号为1,2,3,4的列表。现在,如果从2台服务器调用相同的程序,将1台服务器删除1,3.其他服务器会删除2,4.?
发布于 2016-09-07 17:52:57
1)由于没有where子句,所有行都将锁定在该用户会话的表中。2)只有与where子句匹配的行才会被锁定。Oracle通过在该行的数据块中设置锁位来使用行级锁定。
除非和直到发出提交-没有其他会话将看到这些删除。Oracle将使用为每个单独的delete (或任何DML操作)语句创建的rollback信息来为任何其他会话提供一个读取一致的视图。含义:其他会话将看到没有删除的表。一旦行被锁定-其他会话将被阻止对这些行发出删除,用户将被阻塞,等待这些行被提交或回滚。您可以使用两个sqlplus会话来测试这一点。
如果您想了解更多关于锁的知识,请参阅Tom的优秀著作“专家Oracle DB体系结构”。
是的,两个不同的会话可以删除不同的行集。默认情况下,Oracle不会进行完全的表锁定(它在DML期间锁定表,以防止在挂起更改时对该表进行结构更改),因此一个会话不会阻止另一个会话。
发布于 2016-09-07 13:24:02
没问题。您可以删除不存在的记录。但你不能忘了提交交易。
https://stackoverflow.com/questions/39370543
复制相似问题