面试积累-MySQL- InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

  1. Read Uncommitted(读取未提交内容) >> 在该隔离级别,所有事 务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应 用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
  2. Read Committed(读取提交内容) >> 这是大多数数据库系统的默 认隔离级别(但不是 MySQL 默认的)。它满足了隔离的简单定义:一 个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的 不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该 实例处理其间可能会有新的 commit,所以同一 select 可能返回不同结果。
  3. Repeatable Read(可重读) >> 这是 MySQL 的默认事务隔离级 别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据 行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事 务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现 有新的“幻影” 行。InnoDB 和 Falcon 存储引擎通过多版本并发控制 (MVCC,Multiversion Concurrency Control 间隙锁)机制解决了 该问题。注:其实多版本只是解决不可重复读问题,而加上间隙锁(也 就是它这里所谓的并发控制)才解决了幻读问题。
  4. Serializable(可串行化) >> 这是最高的隔离级别,它通过强制事务 排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个 读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
隔离级别 脏读(Dirty Read) 不 可重复读(NonRepeatable Read) 幻读 (Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读 (Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化 (SERIALIZABLE) 不可能 不可能 不可能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章