MySQL的事务隔离级别

leard 发布于 2025-06-02 1 次阅读


事务隔离级别的分类:

  • 读未提交(read uncommitted)
    • 最低的隔离级别,一个事务可以看到另一个未提交事务的数据修改,会导致脏读问题
  • 读已提交(read committed)
    • 一个事务只能看到已提交的事务所作的更改,可以避免脏读的问题,但是会引发不可重复读问题,即相同的查询会返回不同的值
  • 可重复读(repeatable read)
    • MySQL的默认级别
    • 这个级别下一个事务多次查询的结果是一致的,可以避免不可重复读的问题,但是可能会引发幻读,即在同一个事务,多次查询可能会返回不同数量的行
  • 串行化(serializable)
    • 最高的隔离级别
    • 事务间的操作按顺序执行,可以避免所有的并发问题,但是会大大降低并发性能

不同事务隔离级别产生问题的分类:

  • 脏读
    • 一个事务A可以看到另一个未提交事务B的数据修改,如果事务B数据未提交最终回滚,那么事务A读取的数据就不一致了
  • 不可重复读(值不同)
    • 在同一事务,读取同一数据两次,但是由于其他事务的修改并提交,导致读取的结果不同
  • 幻读(行数不同)
    • 在同一事务,执行相同的查询,但是由于其他事务的插入并提交,导致查询的结果不一样