首页 > 解决方案 > Oracle数据库中的行锁和表锁有什么区别

问题描述

Oracle数据库中的行锁和表锁有什么区别。将for循环与更新语句触发表锁?

标签: oraclelocking

解决方案


表上的任何 DML 语句都将获取表锁。但是这个表锁不太可能以限制并发的方式影响另一个会话。当您的会话更新行时,将有一个行独占表锁,这将阻止另一个会话在表上执行 DDL(例如,添加或删除一列),同时存在涉及该表的活动的、未提交的事务。但据推测,您通常不会在更新表中的行的同时尝试修改表的结构(或了解当您部署这些 DDL 更改时,您将在短时间内阻止其他会话时间,您正在相应地选择部署时间)。

您正在更新的特定行将被锁定,以防止另一个会话修改这些行,直到您的事务提交或回滚。这些行级锁通常是导致性能和可伸缩性问题的锁。理想情况下,您的代码将被构造为尽可能短地持有锁(更新集合中的数据比进行逐行更新要快得多)并最小化两个会话同时尝试更新同一行的可能性.


推荐阅读