首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除行和删除表锁oracle

删除行和删除表锁oracle
EN

Stack Overflow用户
提问于 2016-09-07 12:55:38
回答 2查看 8.6K关注 0票数 1

我有两个疑问

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.?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-07 17:52:57

1)由于没有where子句,所有行都将锁定在该用户会话的表中。2)只有与where子句匹配的行才会被锁定。Oracle通过在该行的数据块中设置锁位来使用行级锁定。

除非和直到发出提交-没有其他会话将看到这些删除。Oracle将使用为每个单独的delete (或任何DML操作)语句创建的rollback信息来为任何其他会话提供一个读取一致的视图。含义:其他会话将看到没有删除的表。一旦行被锁定-其他会话将被阻止对这些行发出删除,用户将被阻塞,等待这些行被提交或回滚。您可以使用两个sqlplus会话来测试这一点。

如果您想了解更多关于锁的知识,请参阅Tom的优秀著作“专家Oracle DB体系结构”。

是的,两个不同的会话可以删除不同的行集。默认情况下,Oracle不会进行完全的表锁定(它在DML期间锁定表,以防止在挂起更改时对该表进行结构更改),因此一个会话不会阻止另一个会话。

票数 3
EN

Stack Overflow用户

发布于 2016-09-07 13:24:02

没问题。您可以删除不存在的记录。但你不能忘了提交交易。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39370543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档