MSQL 默认隔离级别是    可重复读;  可重复读即  同一次 查询,再次查询结果一致;不会查询到别的事务提交的内容;

原理: 开始事务后,做一次select产生一个readview[此后复用该readview,  不可重复读则是每次select都是新的readview],这个readview已经确定了能读取的 undolog链;简单理解就是只能读取到当前事务版本之前的数据;当另一个事务插入数据后,事务版本已经领先了; 所以当当前事务再次 select的时候只能查询到之前readview的内容;

 

可重复读 不能解决幻读问题, 什么是幻读。 比如  现在  查询 数据 为 [1,2,3] ; 准备插入一条4记录(另一个事务插入了4记录);发现4记录插不进去; 这便是幻读,明明没有 为什么插入不进去。

 

那么如何解决这个问题?  mysql提供 间隙锁; 即查询时   通过 for update操作,阻止其他事务写入数据 

posted on 2024-03-20 20:55  yang希军  阅读(36)  评论(0)    收藏  举报