隔离级别共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串行,而不并发
