1. 脏读(Dirty Read)
读到了别人 “还没提交” 的数据,别人一回滚,你读的就是垃圾。

场景:
事务 A:把工资改成 20000,但还没提交
事务 B:这时去读,读到 20000
事务 A:发现错了,回滚,工资变回 10000
结果:事务 B 读到了一个根本不存在、被撤销的数据
一句话:读了未提交的内容 = 脏读
2. 不可重复读(Non-repeatable Read)
同一个事务内,两次读同一行数据,结果不一样。

场景:
事务 A:第一次读 → 工资 10000
事务 B:把工资改成 20000 并提交
事务 A:再读一次 → 工资 20000
一句话:同一行数据,前后读不一致 = 不可重复读
3. 幻读(Phantom Read)
同一个事务内,两次查询的 “行数” 不一样,像出现幻觉。

场景:
事务 A:第一次查 “工资> 1 万的人” → 共 10 条
事务 B:插入一条工资 > 1 万的新数据并提交
事务 A:再查一次 → 变成 11 条
一句话:查询结果的行数变多 / 变少 = 幻读
对应隔离级别(解决方案)
读未提交:三种问题都有
读已提交:解决脏读
可重复读(MySQL 默认):解决脏读 + 不可重复读
串行化:全解决,但性能最差