看图说话:对脏读、不可重复度、幻读进行总结

1、脏读

看图说话:对脏读、不可重复度、幻读进行总结_第1张图片

  1. 「事务B」将 id 为 1 的用户 name 修改为“小卡”,事务未提交
  2. 「事务A」查询 id 为 1 的用户数据,此时 name 已为“小卡”。

2、不可重复度

看图说话:对脏读、不可重复度、幻读进行总结_第2张图片

  1. 「事务A」第一次读取 id 为 1 的用户,name 是 “卡卡”。
  2. 「事务B」将 id 为 1 的用户 name 改为了 “小卡”,并提交了事务
  3. 「事务A」第二次读取 id 为 1 的用户,此时 name 就变成 “小卡” 了。

3、幻读

这里「幻读」我分成 2 个场景来总结,一个是INSERT、一个是DELETE,如下:

3.1、INSERT

看图说话:对脏读、不可重复度、幻读进行总结_第3张图片

  1. 「事务A」第一次读取 age 为 21 的用户,返回结果是 1 条数据。
  2. 「事务B」插入一条age为21的新用户,提交了事务
  3. 「事务A」第二次读取 age 为 21 的用户,返回结果是 2 条数据(将「事务B」插入的新数据也读出来了)。
3.2、DELETE

看图说话:对脏读、不可重复度、幻读进行总结_第4张图片

  1. 「事务A」第一次读取 age 为 21 的用户,返回结果是 2 条数据。
  2. 「事务B」删除 id 为 2 的用户,提交了事务
  3. 「事务A」第二次读取 age 为 21 的用户,返回结果是 1 条数据。

4、不可重复度 和 幻读 的区别

不知道大家对「不可重复度」和「幻读」的理解是不是和我一样,感觉非常相近,都是在一个事务中多次读(相同条件),每次结果都不同。对于这 2 个概念有什么区别,我的理解如下:

  1. 「不可重复度」的重点在于 “修改” 操作。
  2. 「幻读」的重点在于 “新增”、“删除” 操作。

你可能感兴趣的:(数据库,java,mybatis)