事务的隔离级别

  • READ UNCOMMITTED (读未提交)
    • 事务的修改即使没有提交,对其他事务也是可见的。
    • 事务可以读取未提交的数据,这也被称为脏读(Dirty Read)
    • 从性能上来说,Read Uncommitted不会比其他级别高太多,但是却缺乏其他级别的很多好处,所以在实际应用中很少用
  • READ COMMITTED (读提交)
    • 大多数数据库的默认隔离级别(但MySQL不是)
    • 满足隔离性的简单定义:一个事务开始时,只能看见已经提交的事务所做的修改。也就是说,一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的
    • 这个隔离级别也被叫做不可重复读(nonrepeatable read),
  • REPEATABLE READ (可重复读)
    • 解决了脏读的问题,该级别保证同一个事务多次读取同行的记录结果是一样的。
    • 无法解决另一个幻读(Phantom Read)的问题,即某个事务A读取某部分数据时,另一个事务在这部分数据中插入了新的记录,当A再去读取该部分数据时,会产生幻行(Phantom Row)
    • InnoDB通过多版本并发控制来解决了幻读的问题
  • SERIALIZABLE (可串行化)
    • 是最高的隔离级别。通过强制事务串行化执行,避免了幻读问题
    • 简单说,会在读取的每行数据上都加锁,所以会导致大量的超时和锁争用的问题
posted @ 2021-07-09 00:12  JamesVie  阅读(56)  评论(0编辑  收藏  举报