前几天上班的时候去接开水回来的时候,别小组同事C轻声叫了我帮忙看个问题,他给我演示了下,大概意思就是说他本地在代码里更新了一个表的一条数据的一个字段,代码没有任何报错,显示成功了,但是再去查的话,发现还是原来的值,好像没有更新成功。
他打断点给我看,参数都是正确的,mybatis也把sql打印到了日志里,就是一个很简单的
update tbl set var=7 where id=685add
这种。
我再三检查没有报错,确实更新成功了。我当时就断定这个肯定是一个很弱智的问题。
我就把日志里的sql copy到navicat里执行,参数和代码里的一样,也显示执行更新成功了,再一查,我靠,值还是原来的值。首先排除了代码和mybatis的bug。当时还在想是不是事务的问题,但是我们以前更新别的语句都没有说还要手动去提交一波事务。大家猜下为什么没有更新成功,难道是被我们发现了数据库bug?
。
。
。
。
。
。再提示一波
其实用的数据库和连接工具都不是文里写的这些,但是不影响结论,聪明的你是不是已经猜到了是什么原因?
。
。
。
。
。
。再提示一波
我改了copy出来的sql update别的字段,结果可以更新,我还以为是不是和字段类型有关系,我又update一个和那个改不动类型一样的字段,结果也能成功修改。难道是这个字段命名比较特殊,或者这个字段在数据库层面做了限制不能被更新,看了下ddl,很普通也没有什么问题。你猜到什么问题了吗?
。
。
。
。
。
。 最后一轮提示警告
我再试了下,确实只有那个字段改不了值,实在想不出什么问题,让他把数据库连接信息和sql发我,我去我电脑上试下,看是不是他电脑问题...
刚走了几步,就听他喊我说,不用试了,他知道是什么问题了。(他们组长刚好也路过,他们组长给他说的这个)
。
。
。
。
。后台有个定时任务去刷那个字段的值!!!
后台有个定时任务去刷那个字段的值!!!
后台有个定时任务去刷那个字段的值!!! 最终结论,你通过代码或者sql改了值,等你去看的时候,定时任务已经刷回到原来的值了,是不是很弱智,找我看这个问题的人都不知道有这个定时任务,我都不是他们组的,艹,我承认确实一开始没想到是这个原因。
20201120