
MSQL 默认隔离级别是 可重复读; 可重复读即 同一次 查询,再次查询结果一致;不会查询到别的事务提交的内容;
原理: 开始事务后,做一次select产生一个readview[此后复用该readview, 不可重复读则是每次select都是新的readview],这个readview已经确定了能读取的 undolog链;简单理解就是只能读取到当前事务版本之前的数据;当另一个事务插入数据后,事务版本已经领先了; 所以当当前事务再次 select的时候只能查询到之前readview的内容;
可重复读 不能解决幻读问题, 什么是幻读。 比如 现在 查询 数据 为 [1,2,3] ; 准备插入一条4记录(另一个事务插入了4记录);发现4记录插不进去; 这便是幻读,明明没有 为什么插入不进去。
那么如何解决这个问题? mysql提供 间隙锁; 即查询时 通过 for update操作,阻止其他事务写入数据
浙公网安备 33010602011771号