• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
你的小铃铛呀
博客园    首页    新随笔    联系   管理    订阅  订阅

脏读,幻读,不可重复读,以及两类数据丢失更新

脏读:是指一个事务读取到了另一事务未提交的数据,造成select前后数据不一致

 

 如上图所示,事务A讲原来数据库里面的X值由1更新为2,这时事务B开始读取数据库数据,读到的是修改后的数据X为2,这时事务A不提交了,

数据进行回滚,X又回到了原来的值了,这个时候就发生了脏读。现象就是数据库明明是1,而读到的却是2.

幻读:指select时不存在某记录,但准备插入时发现此记录已存在,无法插入

 

如上图所示,事务A和事务B,对数据库进行操作,事务A先查了一条数据,发现是空的,于是就准备把这条数据插进去,与此同时,正好事务B插入了一条数据,导致事务A查询的数据不为空了

,A事务进行插入数据时,发现有了相同的数据了,插入不了,就好像出现幻觉一样,刚才明明没有值的,这就是幻读

幻读和脏读的区别就是幻读是读的已经提交的事务,而脏读读的是未提交的事务

不可重复读:一个事务读取到了另一事务已提交的数据,造成select前后数据不一致

 

 如上图所示,事务B第一次读X是1,后来事务B更新X为2,并且提交了,后来事务B又读了一次读的是X为2,前后读的数据不一致,这就是不可重复读

 第一类数据丢失更新:

 

如图所示,事务A将X改为2,此时事务B把X修改为3,事务B提交了,这个时候事务A进行回滚了,结果X又变成原来的1了,

导致事务B的更新丢失了

 第二类数据丢失更新:

 

 如图所示:事务A讲X由1改成2,提交事务结束了,这个时候事务B还在操作,事务B又把X改成了3,提交事务,最后事务A的更新就丢失了

备注:不同事务同时进行数据库操作,可能由于进程,cpu等其他情况,就会出现先后顺序了,后续在写针对上面几种情况的解决方法

posted @ 2021-03-26 11:26  你的小铃铛呀  阅读(347)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3