MySQL 的隔离级别

未提交读 READ UNCOMMITTED

  • 在该级别的事务中的修改即使没有提交,对其他事务也是可见的
  • 事务可以读取其他事务修改完但是没提交的数据,这种问题叫做脏读
  • 这个级别的事务还会造成不可重复读幻读
  • 性能没比别的级别好很多,所以很少使用

提交读 READ COMMITED

  • 多数数据库默认的隔离级别
  • 提交读满足了隔离性的简单定义:一个事务开始时只能看到已经提交的事务所做的更改
  • 一个事务从开始一直到提交之前的所有修改对其他事务来说都是不可见的,这也叫做不可重复读,因为执行2次同样的查询可能得到不同的结果

可重复读 REPEATABLE READ(MYSQL的默认隔离级别)

  • 在同一个事务内的查询都是事务开始时刻一致的
  • 可重复读解决了不可重复读的问题,保证了在同一事务中多次读取同样的记录的结果一致。
  • 无法解决幻读,幻读就是当某个事务在读取某个范围内的记录时,会产生幻行
  • innodb存储引擎通过多版本并发控制mvcc来解决幻读的问题

可串行化 SERIALIZABLE

  • 最高级别的隔离级别,通过强制事务串行执行,避免幻读
  • 可串行化会在读取的每一行数据上都加锁,会导致大量的超时或者锁争用的问题。
  • 现实中很少用这个级别,只有非常需要确保数据一致性,并且没有并发的时候才考虑用

MySQL中的幻读,你真的理解吗?

posted @ 2022-03-09 16:57  张三丰学Java  阅读(22)  评论(0编辑  收藏  举报