一个幻象读的例子
一个幻象读的例子
猪刚烈 发表于3年前
一个幻象读的例子
  • 发表于 3年前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

      近期工作中遇到一个BUG报重复提交会生成两条同样的记录。因为这种数据的一个字段在一定范围内不允许重名(并不是全表数据不允许重名因此这个字段没有unique约束),所以每次保存记录时会先检查有没有重名,如果没有重名才会保存。但是在重复提交过程中若操作间隔足够短就会出现以下情况:
      第一个事务首先查询,结果没有重名,接着第二个事务也开始查询,结果也没有重名,然后第一个事务插入数据并提交,接着第二个事务也将同样一份数据插入,因为没有unique约束,因此也插入成功。假设第二个事务在提交之前再查询是否有重名就会发现已经存在重名了,这样第一次查询就是典型的“幻象读”。幻象读的标准描述如下:


      杜绝幻象读必须使用最高的隔离级别,即事务串行化。

 

NOTE:如无特别设定,程序总是使用数据库的默认隔离级别。mysql的默认级别是第三级:REPEATABLE-READ。

共有 人打赏支持
粉丝 21
博文 708
码字总数 110
作品 1
×
猪刚烈
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: