database - Oracle 在执行 DML 语句时会锁定整个表还是只锁定行

标签 database oracle oracle11g database-locking

当我尝试在数据库表中插入/更新某些内容时,Oracle 会锁定整个表还是仅锁定正在插入/更新的行?

这是可以通过外部配置来控制的东西吗?

最佳答案

我们可以使用 LOCK TABLE 命令显式地发出锁。 Find out more

否则,插入不会锁定任何其他行。由于 Oracle 的读取隔离模型,该行仅在我们提交之前存在于我们的 session 中,因此其他人无法对其进行任何操作。 Find out more .

更新语句只锁定受影响的行。除非我们用 SELECT ... FOR UPDATE 实现了悲观锁策略。 Find out more .

最后,在 Oracle 中,写入器不会阻塞读取器。因此,即使其他 session 也可以读取锁定的行,但它们无法更改。 Find out more .

此行为嵌入到 Oracle 内核中,不可配置。


Justin 就表级 DDL 锁提出了一个很好的观点。该锁将导致在表上执行 DDL 的 session 等待 DML session 提交,除非 DDL 类似于 CREATE INDEX,在这种情况下它将立即失败并返回 ORA-00054。

关于database - Oracle 在执行 DML 语句时会锁定整个表还是只锁定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021447/

相关文章:

oracle - 热重新部署和 Oracle 数据库的 Permgen 内存泄漏

c# - 从 Oracle DB 获取数据时在 C# 中获取 System.OutOfMemoryException

java - mybatis在插入数据库时​​是否会更改时区?

sql - 在 Oracle SQL 中对数据集进行分组

oracle - 如何从嵌套表中选择列值

MySQL 多查询限制为 1,UNION 会提高速度吗?

php - 如何让谷歌搜索像这样显示我的网站

mysql - Magento 数据库扩展?

php - 在其他表中使用关系表的 ID

sql - 使用选择和行锁更新查询