当我尝试在数据库表中插入/更新某些内容时,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/