【问题标题】:MySQL lock and statements that lock rows using a unique indexMySQL 锁和使用唯一索引锁定行的语句
【发布时间】:2018-10-31 08:15:34
【问题描述】:

在MySQL文档14.6.1 InnoDB Locking "Gap Locks"部分中说

使用唯一值锁定行的语句不需要间隙锁定 索引来搜索唯一的行。 ...例如,如果 id 列具有唯一索引,以下语句 仅使用 id 值为 100 的行的索引记录锁 和 ...

SELECT * FROM child WHERE id = 100;

如果id 未编入索引或具有 非唯一索引,语句确实锁定了前面的间隙

不过,在后续部分,14.6.3 Locks Set by Different SQL Statements in InnoDB,据说

SELECT ... FROM 是一致读取,读取数据库的快照并设置无锁,除非事务隔离级别设置为 SERIALIZABLE。

似乎后者(无锁)与前者冲突(需要记录或间隙锁)。

我有什么误解吗?

【问题讨论】:

    标签: mysql database innodb


    【解决方案1】:

    没有。这里没有矛盾。后面的语句是指SELECT ... FROM 没有锁定任何东西,因为这是一个没有WHERE 子句的SELECT。 此外,在前者中,您所说的是一种非常特殊的锁,它只会阻止插入具有特定键值的记录(“间隙锁”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多