关于mysql:面试八股文MYSQL隔离模式

8次阅读

共计 686 个字符,预计需要花费 2 分钟才能阅读完成。

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. 串行化
      顾名思义。
正文完
 0