事务隔离级别
隔离级别
隔离级别 | 标识 | 说明 |
---|---|---|
读未提交 | READ UNCOMMITTED | 可以在事务B中读取事务A中未提交的insert,update,delete |
读已提交 | READ COMMITTED | 可以在事务B中读取事务A中已提交的insert,update,delete |
可重复读 | REPEATABLE READ | 事务A修改id=1数据,事务B多次读取到id=1的数据是相同的,不会读到事务A的修改 |
串行化 | SERIALIZABLE | 每个操作依次执行 |
隔离效果
隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
---|---|---|---|
未提交读(Read uncommitted) | 可能 | 可能 | 可能 |
已提交读(Read committed) | 不可能 | 可能 | 可能 |
可重复读(Repeatable read) | 不可能 | 不可能 | 可能 |
可串行化(Serializable ) | 不可能 | 不可能 | 不可能 |
说明
- 可重复读:事务中多次读取相同行得到的数据是相同的
- 不可重复读:事务中多次读取相同行得到的数据可能是不相同的,读取到的数据可能是无效的
- 幻读:以下两个例子
a. 事务B最开始读取数据id=1,2,事务A新增id=3并提交,接着事务B新增id=3并提交就会失败。
b. 事务B最开始读取数据id=1,2,事务A新增id=3并提交,接着事务B修改id=3的信息并提交就会成功。