今天帮同事分析个问题,半天没想出来,后来别人分析出来了,真是惭愧。。。。。回过头想想自己为什么没有分析出来,终于找到元凶:思维惯性!!!!下面简单介绍下这个问题:
有段逻辑,是这样的-----
有个数据源,会不定时向test表写入id=2的数据
1. update test set id=5 where not exists(集合A) ;--id原来为2
2. 取test表中id为2的行,更新id=3;
3. update test set id=4 where id=3 and exists(集合A)
以上逻辑处理完毕后,发现test表中还有id=3的数据,这看似严谨的逻辑到底哪里出了问题呢?
原来是执行步骤1时,test表中还没有数据,执行步骤2时,test表才有数据,这样 not exists(集合A) 的数据就没有被更新为5,只被更新为3留了下来。。。。。。
一开始分析的时候看到test表中有数据,就惯性的认为执行步骤1时test表中也有数据,导致没有找到问题的根源,还一直认为可能是数据源来的数据有问题。所以告诫大家分析问题时,一定要小心惯性思维,再就是不要一开始就认为是其他系统有问题,这样就会禁锢你的思维。。。。。。切记切记