隔离级别共4种:

  • 读 | 已提交 —— RC (read committed)
  • 读 | 未提交
  • 可重复读 | null—— RR (repeatable read)
  • 串行化

格式: 事务A | 事务 B

详细介绍

1、 read uncommitted

  • 事物A和事物B,事物A未提交的数据,事物B可以读取到
    - 这里读取到的数据叫做“脏数据”(B 撤销事务后,A 读取的就属于无效数据)
    - 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

    A 只说了让卡里打 1000, B 查询到卡里 多了 1000.

2、read committed

  • 事物A和事物B,事物A提交的数据,事物B才能读取到
    - 这种隔离级别高于读未提交
    - 换句话说,对方事物提交之后的数据,我当前事物才能读取到
    - 这种级别可以避免“脏数据”
    - 这种隔离级别会导致“不可重复读取”
    - Oracle默认隔离级别

    A 往卡里打完 1000 后, B 查询到卡里 多了 1000.

3、repeatable read

  • 事务A和事务B,事务A提交之后的数据,事务B读取不到
    - 事务B是可重复读取数据
    - 这种隔离级别高于读已提交
    - 换句话说,对方提交之后的数据,我还是读取不到
    - 这种隔离级别可以避免“不可重复读取”,达到可重复读取
    - 比如1点和2点读到数据是同一个
    - MySQL默认级别
    - 虽然可以达到可重复读取,但是会导致“幻像读”

    B 查询到卡里的钱为 0 ,A 往卡里打完 1000 后, B 查询到卡里的钱还是 0.

4、serializable

  • 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
    - 这种隔离级别很少使用,吞吐量太低,用户体验差
    - 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发