前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 02 - 并发一致性问题

SQL 02 - 并发一致性问题

作者头像
Reck Zhang
发布2021-08-11 11:58:16
1930
发布2021-08-11 11:58:16
举报
文章被收录于专栏:Reck Zhang

并发一致性问题

在并发环境下, 事务的隔离性很难保证, 因此会出现一些并发一致性问题.

问题

  1. 脏读 T1修改了一个数据, T2随后读取了这个数据, 如果T1撤销了这次修改, 那么T2读取的数据是脏数据. 因为T1的修改并没有commit到数据库, 但是这个事务对别的事务可见.
  2. 不可重复读 T1中多次读取一个数据过程中, 由于T2对数据进行了修改, 并提交了事务, 因此T1前后读的到的相同数据的值不相同.
  3. 幻读 T1读取了某个范围的数据, T2在这个范围插入了新的数据, T1再次读的时候, 发现在这个范围中还有没有读取的数据, 像是幻觉.

不可重复读与幻读区别

不可重复读的关键是对某一行的修改, 幻读的关键在于插入.

如果用锁机制来实现两种隔离, 在可重复读中, 第一次读取数据时就应该对数据加锁, 其他事务无法对其进行修改. 但是这无法保证对幻读的隔离. 对于幻读, 需要serializable隔离级别, 用读写锁进行修饰, 但是这样会降低并发能力.

隔离级别

  1. 未提交读 事务中的修改, 即使没有提交, 对其他事务也可见.
  2. 提交读 一个事务只能读取已经提交的事务所做的修改. 也就是说, 一个事务在提交前, 对其他事务是不可见的.
  3. 可重复读 保证在同一个事务中多次读取同个数据的结果是一样的.
  4. 可串行化 强制事务串行化执行.

隔离级别

脏读

不可重复读

幻影读

未提交读

YES

YES

YES

提交读

NO

YES

YES

可重复读

NO

NO

YES

可串行化

NO

NO

NO

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 并发一致性问题
    • 问题
      • 不可重复读与幻读区别
        • 隔离级别
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档