简单来说:
脏写:B改没提交,A改并提交,B回滚了--->A没改成(更新丢失)
脏读:B改没提交,A读,B回滚了--->A读的是错的(读到别人未提交的数据)
不可重复读:A读,B提交修改事务,A再读---->读的数据内容不一样了(两次读取数据内容不一致,数据被内容别人更新了)
幻读:A读某条件的数据,B插入/删除符合这个条件的数据并提交,A再读---->读的不一样了(两次读取记录数不一致)
不可重复读重点是update,幻读重点是insert、delete
读未提交:写的时候别人不可以写
读已提交:写的时候别人禁止访问(干啥都不行,读写)(每次查询都会生成ReadView)
可重复读:读的时候别人禁止访问(干啥都不行,读写)(默认隔离级别)(第一次查询生成ReadView)
可串行化:事务串行执行,只能一个一个执行,一个执行完下一个才可以执行
隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
---|---|---|---|
读未提交(Read uncommitted) | 可能 | 可能 | 可能 |
读已提交(Read committed) | 不可能 | 可能 | 可能 |
可重复读(Repeatable read) | 不可能 | 不可能 | 可能 |
可串行化(Serializable ) | 不可能 | 不可能 | 不可能 |