Skip to content

在事务隔离级别中,MySQL InnoDB 存储引擎的隔离级别的描述也许有个问题 #805

@EallanW

Description

@EallanW

“这里需要注意的是:与 SQL 标准不同的地方在于InnoDB 存储引擎在 **REPEATABLE-READ(可重读)事务隔离级别下使用的是Next-Key Lock 锁算法,因此可以避免幻读的产生,这与其他数据库系统(如 SQL Server)是不同的。所以说InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) 已经可以完全保证事务的隔离性要求,即达到了 SQL标准的SERIALIZABLE(可串行化)**隔离级别。

因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容):,但是你要知道的是InnoDB 存储引擎默认使用 **REPEATABLE-READ(可重读)**并不会有任何性能损失。”

在以上这段内容中,InnoDB 存储引擎的默认支持的隔离级别REPEATABLE-READ(可重读) 并不能完全避免幻读的产生。原因详见请看以下链接,该文有引用MySQL的官方文档来解释。结论是:
“结论:MySQL InnoDB的可重复读并不保证避免幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是next-key locks。”

https://blog.csdn.net/Marvel__Dead/article/details/70209641

请问有关人士可以核实吗?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions