隔离级别

共4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable。

隔离级别 脏读 不可重复读 幻读
Readuncommitted
Readcommitted ×
Repeatableread × ×
Serializable × × ×
1.Readuncommitted读未提交
A事务 B事务
读余额为2000元
转出1000元
再次读余额为1000元
发现不对,回滚转出的1000元
再次读余额为2000元,很纳闷

总结:B事务还没提交,A事务就能实时读到数据,出现脏读

2.Readcommitted读提交
A事务 B事务
读余额为2000元
转出1000元,提交事务
再次读余额为1000元

总结:解决了脏读,但A事务两次读取的不一致,出现不可重复读

3.Repeatableread可重复读
A事务 B事务
读余额为2000元,并且读流水明细记录为0条
转出1000元,同时插入流水明细记录id为record001,提交事务
再次读余额为2000元,并且再次读流水明细记录还是0条。但是对流水明细表进行insert操作,不能再新增id为record001的记录,对record001进行delete和update操作,影响条数都为1

总结:解决了不可重复读,但是对于B事务进行新增和删除记录,A事务存在幻读(读不到但是可以操作)。

4.Serializable序列化
A事务 B事务
代码A1
代码A2
代码B1
代码B2

总结:A事务先开始,就一条一条执行,直到事务结束,才开始B事务,一条一条执行,直到事务结束。解决了所有问题,但是代价最高,性能很低,一般很少使用。

results matching ""

    No results matching ""