问题情景
今天开发过程中遇到个很奇怪的问题,打断点的情况下,Java代码执行到getById的时候,查询出来为null,但是用sql语句去查可以查出数据
解决方案
这个当时排除了很久,也排除了缓存,Mabits的二级缓存的相关原因,一直找不到头绪,后来再仔细阅读了源码,发现重点就在前面我执行了一个remove把所有的数据都删除了。
那为什么代码里删除了,数据库里却显示还在呢
这就是MVCC导致的问题,因为Mysql的默认隔离是读已提交,但是代码在执行的过程中事务还未完全走完。导致代码执行时的readview和数据库里可以看到的view是不一样的,从而导致了本次问题的产生,具体可以查看博客内对CSDN对MVCC的具体介绍