frank-lam / fullstack-tutorial

🚀 fullstack tutorial 2022,后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试
https://frank-lam.github.io/fullstack-tutorial
11.5k stars 2.44k forks source link

幻读解释有误 #5

Closed wyn-lin closed 5 years ago

wyn-lin commented 5 years ago

我测试了一下mysql,事务t1增加数据后提交,事务t2是无法读到t1提交的数据的,因为mysql隔离级别为默认为可重复读,所以不管t1提交与否,t2都读不到t1提交的数据,但是t2还是可以感知到t1提交的变化,比如t2如果要插入一条用户名唯一的数据a,但是t1已经插入a并提交,t2是读不到a,但是插入a时会因为唯一索引报duplicate错误。

wyn-lin commented 5 years ago

好像查了一下,标准的幻读定义是你说的那样,只是mysql innodb引擎在RR隔离级别下做了处理,与标准不一样

frank-lam commented 5 years ago

@wyn-lin 幻读:是在一次查询中,两次数据不一样,主要是同一条件下,数据的新增或者删除 (数据条数变化)导致的。InnoDB存储引擎下,我也查阅了一些资料,现在主流数据库都使用MVCC并发控制,使用之后RR(可重复读)隔离级别下是不会出现幻读的现象。感谢你的issue,欢迎在仓库做一些contribute。

frank-lam commented 5 years ago

@wyn-lin 开源小组,英雄招募令 欢迎加入