MySQL 服务端是允许多个客户端连接的,这意味着 MySQL 会出现同时处理多个事务的情况。
| 问题 | 正确定义 | 关键点 |
|---|---|---|
| 脏读(Dirty Read) | 一个事务读取到了另一个事务未提交的数据,而另一个事务最终回滚,导致读取的数据不存在 | 读到了"脏数据" |
| 不可重复读(Non-Repeatable Read) | 一个事务内多次读取同一行数据,由于其他事务修改并提交,导致前后读取结果不一致 | 针对 UPDATE |
| 幻读(Phantom Read) | 一个事务内多次查询同一个范围的数据,由于其他事务插入或删除并提交,导致查询结果集不一致 | 针对 INSERT/DELETE |
MySQL 解决并发问题,主要靠 事务隔离机制 + MVCC(多版本并发控制) + 锁机制 。
模拟幻读场景:
