MySQL隔离级别

  • 四种隔离级别
    • Read Uncommitted
    • Read Committed
    • Repeatable Read
    • Serializable
  • 有什么问题
    • 脏写
      • 两个事务并发写同一行记录,所有隔离级别下都不能允许发生这种情况
    • 脏读
      • 事务A读到事务B还未提交的写
    • 不可重复读
      • 事务中对同一行的多次读取的结果不同(因为两次读中间,其他事务对该行进行了更新并提交)
    • 缓读
      • 对某个范围的多次读取不同(因为两次读中间,其他事务在该范围内插入了数据并提交)
  • 怎么解决
    • MVCC
      • 允许读写同时进行
      • 事务利用MVCC进行的读称为一致性读或快照读
    • 加锁
      • 读写不能同时进行
  • 四种隔离级别解决的问题
    • Read Uncommitted
      • 什么都没有解决,脏读、不可重复读、缓读都存在
    • Read Committed
      • 解决了脏读
      • 通过ReadView实现,每次读都开启一个ReadView
    • Read Committed
      • 通过ReadView实现,第一次读才开启一个ReadView
      • SQL标准中只要求RC解决脏读和不可重复读,InnoDB中同时解决了脏读、不可重复读和幻读
    • Serializable
      • 解决了脏读、不可重复读和幻读

你可能感兴趣的:(MySQL隔离级别)