1、脏读
- 「事务B」将 id 为 1 的用户 name 修改为“小卡”,事务未提交。
- 「事务A」查询 id 为 1 的用户数据,此时 name 已为“小卡”。
2、不可重复度
- 「事务A」第一次读取 id 为 1 的用户,name 是 “卡卡”。
- 「事务B」将 id 为 1 的用户 name 改为了 “小卡”,并提交了事务。
- 「事务A」第二次读取 id 为 1 的用户,此时 name 就变成 “小卡” 了。
3、幻读
这里「幻读」我分成 2 个场景来总结,一个是INSERT、一个是DELETE,如下:
3.1、INSERT
- 「事务A」第一次读取 age 为 21 的用户,返回结果是 1 条数据。
- 「事务B」插入一条age为21的新用户,提交了事务。
- 「事务A」第二次读取 age 为 21 的用户,返回结果是 2 条数据(将「事务B」插入的新数据也读出来了)。
3.2、DELETE
- 「事务A」第一次读取 age 为 21 的用户,返回结果是 2 条数据。
- 「事务B」删除 id 为 2 的用户,提交了事务。
- 「事务A」第二次读取 age 为 21 的用户,返回结果是 1 条数据。
4、不可重复度 和 幻读 的区别
不知道大家对「不可重复度」和「幻读」的理解是不是和我一样,感觉非常相近,都是在一个事务中多次读(相同条件),每次结果都不同。对于这 2 个概念有什么区别,我的理解如下:
- 「不可重复度」的重点在于 “修改” 操作。
- 「幻读」的重点在于 “新增”、“删除” 操作。