数据库何时锁定数据?



我只是想说清楚这一点。我知道,当会话 A 尝试更新会话 B 当前正在使用的单元格时,数据库锁定该数据和会话 A 必须等待会话 B 完成。

像 UPDATE 这样的 SQL 语句可能会发生这种情况,但是,如果会话 B 正在执行 SELECT 会发生什么

情况会话 A 也必须等待吗?

">

如果会话 B 正在执行 SELECT" - 取决于会话 B 的隔离级别。 如果"可重复读取"且没有 MVCC-DBMS 或"可序列化",则必须锁定会话 B 中读取的记录以防止更改,否则无法满足第二次相同读取的条件。

如果数据库上唯一的事务是SELECTs,则不需要锁定。

需要锁定来在更改数据时"保护"行。 当仅读取数据时,不需要它们。 因此,如果其中一个会话正在进行数据修改(例如UPDATE(,那么它可能会阻止SELECT

请注意:数据库没有"细胞"的概念。 锁(取决于数据库(在表、页和行级别上可用。

我应该指出,这是针对"标准"数据库技术的。 面向列的数据库的操作略有不同。

最新更新