转载 

MySQL 脏读 、不可重复读、幻读 详解

分类:Mysql    441人阅读    IT小君  2021-07-13 22:32

脏读

一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象的叫作"脏读"(Dirty Reads)。

不可重复读

一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!这种现象就叫作“ 不可重复读”(Non-Repeatable Reads)。

幻读(phantom read)

  • 前提条件:InnoDB引擎,可重复读隔离级别,使用当前读时。
  • 表现:一个事务(同一个read view)在前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行。两点需要说明
      1、在可重复读隔离级别下,普通查询是快照读,是不会看到别的事务插入的数据的,幻读只在当前读下才会出现。
      2、幻读专指新插入的行,读到原本存在行的更新结果不算。因为当前读的作用就是能读到所有已经提交记录的最新值。

幻读的影响

  • 会造成一个事务中先产生的锁,无法锁住后加入的满足条件的行。
  • 产生数据一致性问题,在一个事务中,先对符合条件的目标行做变更,而在事务提交前有新的符合目标条件的行加入。这样通过binlog恢复的数据是会将所有符合条件的目标行都进行变更的。

幻读产生的原因

  • 行锁只能锁住行,即使把所有的行记录都上锁,也阻止不了新插入的记录。

如何解决幻读

  • 将两行记录间的空隙加上锁,阻止新记录的插入;这个锁称为间隙锁
  • 间隙锁与间隙锁之间没有冲突关系。跟间隙锁存在冲突关系的,是往这个间隙中插入一个记录这个操作。


2021-07-13 22:31:37
点击广告,支持我们为你提供更好的服务

有机水果蔬菜HTML5网站模板

响应式时尚单品在线商城网站模板

js+css3抽奖转盘旋转点餐代码

css鼠标跟随文字模糊特效

网页设计开发公司网站模板

html5 svg夜空中星星流星动画场景特效

html5 canvas进度条圆环图表统计动画特效

HTML5现代家居装潢公司网站模板

响应式太阳能能源公司网站模板

中小型创意设计服务公司网站模板

HTML5数字产品服务公司网站模板

小众时尚单品在线电子商务网站模板

HTML5 Canvas竖直流动线条背景动画特效

响应式咖啡饮品宣传网站模板

jQuery右端悬浮带返回顶部特效

css+js实现的颜色渐变数字时钟动画特效

canvas炫酷鼠标移动文字粒子特效

html5图标下拉搜索框自动匹配代码

html5 canvas彩色碎片组合球形旋转动画特效

现代时尚家具公司网站模板

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务