MySQL数据库隔离级别

数据库隔离级别用于处理数据库中的数据读写规则

定义

  1. 脏读
    • 事务 A 对数据进行了增删改,但未提交事务,事务 B 可读取到该数据
    • 如果事务 A 进行回滚,则事务 B 读取到的数据是脏数据
  2. 不可重复读
    • 事务 A 中发生了两次读操作
    • 在第一次读操作和第二次读操作之间,事务 B 对该数据进行了修改
    • 导致事务 A 两次读取的数据是不一致的
  3. 幻读
    • 事务 A 对一定范围内的数据进行了修改
    • 事务 B 在这个范围内新增了一条数据
    • 这时事务 A 对这些数据进行的修改会丢失

隔离级别

  1. Read-Uncommitted - Level 0
    • 导致脏读
  2. Read-Committed - Level 1
    • 避免脏读
    • 允许不可重复读和幻读
  3. Repeatable-Read - Level 2
    • 避免脏读
    • 避免不可重复读和幻读
  4. Serializable - Level 3
    • 串行化读,事务只能依次执行
    • 避免脏读
    • 避免不可重复读和幻读
    • 执行效率慢,慎重使用

总结

  1. 隔离级别越高,越能保证数据安全,但对并发性能的影响越大
  2. Oracle 、SqlServer 的默认隔离级别是 Read-Committed
  3. MySQL 的默认隔离级别是 Repeatable-Read