登录
首页 >  数据库 >  MySQL

面试八股文-MYSQL隔离模式

来源:SegmentFault

时间:2023-02-19 19:28:01 344浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《面试八股文-MYSQL隔离模式》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

MYSQL 数据库中一个事务具备ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

事务并发可能引发的问题

  • 1.脏读
    一个事务读到了另一个未提交事务修改过的数据。
    (脏读只在读未提交隔离级别才会出现)
  • 2.不可重复读
    一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。
    (不可重复读在读未提交和读已提交隔离级别都可能会出现)
  • 3.幻读
    一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来。
    (幻读在读未提交、读已提交、可重复读隔离级别都可能会出现)

隔离模式

    1. 未提交读
      在读未提交隔离级别下,事务A可以读取到事务B修改过但未提交的数据。
      可能发生脏读、不可重复读和幻读问题。
    1. 已提交读
      在读已提交隔离级别下,事务B只能在事务A修改过并且已提交后才能读取到事务B修改的数据。
      读已提交隔离级别解决了脏读的问题,但可能发生不可重复读和幻读问题
    1. 可重复读
      在可重复读隔离级别下,事务B只能在事务A修改过数据并提交后,自己也提交事务后,才能读取到事务B修改的数据。
      可重复读隔离级别解决了脏读和不可重复读的问题,但可能发生幻读问题。

      提问:为什么上了写锁(写操作),别的事务还可以读操作?
      因为InnoDB有MVCC机制(多版本并发控制),可以使用快照读,而不会被阻塞。

      提问:为什么innodb默认使用可重复读?
      因为,binlog和sql执行顺序问题。
    1. 串行化
      顾名思义。

本篇关于《面试八股文-MYSQL隔离模式》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于数据库的相关知识,请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表