【发布时间】: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。
似乎后者(无锁)与前者冲突(需要记录或间隙锁)。
我有什么误解吗?
【问题讨论】: