数据库使用系列专栏:数据库使用系列文章


前面介绍了数据库事务的概念及其实现原理,为了提升系统的并发性能SQL标准定义了不同的事务隔离级别,从低到高依次是:

  • 读未提交(READ UNCOMMITTED)
  • 读已提交(READ COMMITTED)
  • 可重复读(REPEATABLE READ)
  • 串行化(SERIALIZABLE)

不同隔离级别可能导致的并发异常:

事务隔离级别 可能导致的并发异常
脏读 不可重复读 幻读
读未提交(read-uncommitted) 可能 可能 可能
不可重复读(read-committed)   可能 可能
可重复读(repeatable-read)     可能
串行化(serializable)      

本文针对不同的隔离级别进行测试,以MySQL InnoDB存储引擎(默认事务级别可重复读,可重复读级别InnoDB引擎通过加锁设计已消除幻读可能)为例。

1 读未提交(read uncommitted)

MySQL事务隔离级别测试实例

MySQL事务隔离级别测试实例

2 读已提交(read committed)

MySQL事务隔离级别测试实例

MySQL事务隔离级别测试实例

3 可重复读(repeatable read)

MySQL事务隔离级别测试实例

MySQL事务隔离级别测试实例

4 串行化(serializable)

系统并行性能差,数据操作只能串行:不同事务读取可以同时操作(共享读),但不能增删改。

补充:不可重复读和幻读区别

1、不可重复读针对确定的某一行数据,幻读针对不确定的多行数据;

2、解决不可重复读加锁时只需要添加行级锁,解决幻读加锁需要添加表级锁。

相关文章:

  • 2021-04-01
  • 2021-09-17
  • 2021-10-29
猜你喜欢
  • 2021-09-29
  • 2022-12-23
  • 2021-06-29
  • 2021-07-09
  • 2022-01-12
相关资源
相似解决方案