今天遇到一个很诡异的问题,调试代码的时候发现查到的数据和库中的数据不一样(像是过时的数据,比如一个字符串,部分匹配的上,但是不全),且插入和更新数据都无效,但是直接写 sql 可以正常操作数据库,比如我走了一遍更新状态接口,数据库实际并没有更新数据,但是代码里再查未更新状态的数据,居然查不到之前更新的那条数据了 springcloud + mybatis + mysql
1
yumc 2022-06-17 12:16:30 +08:00
这种问题,大多是使用不正确或不细心。只有贴关键代码才能看出来咯
|
2
newaccount 2022-06-17 13:16:26 +08:00
猜不出来,可能:
1. 执行到断点的时候 session 还没提交? 2. 试试关掉 mybatis 一级二级缓存? |
3
devswork 2022-06-17 13:31:33 +08:00
我感觉就是你数据库工具里连接的数据库 和 spring 项目里的数据库连接不是同一个,哈哈哈哈
|
4
xjngbla OP @newaccount #2 谢谢,我试试
|
6
notwaste 2022-06-17 15:29:20 +08:00
会不会是加了事务 方法没执行完就跟去数据库对比了?
|
7
Suddoo 2022-06-17 15:54:07 +08:00 via iPhone
一面之辞,说不清
或许服务有多个实例,接受请求的实例运行的代码逻辑和你本地的代码不一样,查出来的数据当然不一样 或许…… |
9
87B3F508 2022-06-17 16:06:51 +08:00
是不是事务设置成 readOnly 了?
|
11
tobepro 2022-06-17 16:15:51 +08:00 2
按照我之前出类似问题的经验。越诡异的问题一般都是因为一些低级问题导致的。好好仔细检查本地配置和服务器配置。肯定能发现问题。
|
12
xwayway 2022-06-17 16:24:48 +08:00
你别 debug 啊,你直接把你服务的 sql 打出来,坑定是你 debug 到真实执行的过程中,数据被某些东西例如楼上提到的 缓存,readonly ,aop 等东西改了
|
13
ohmycorolla 2022-06-17 17:54:10 +08:00
1.是否有缓存
2.你以为对应的是这条数据,其实并不是 |
14
speedofstephen 2022-06-17 18:00:51 +08:00
感觉就是 2 楼说的问题啊。 你开事务了么, 如果开启了, 事务是在方法执行完提交的。 现在我有点生疏了,讲不好。建议百度以下脏读幻读
|
15
Jooooooooo 2022-06-17 18:03:25 +08:00
你是不是 debug 打断了流量, 没跑完.
|
16
tianyu94 2022-06-17 22:21:08 +08:00
我最近遇到一个,时序数据库存数据,动态 SQL 插入数据报语法错误,但是把输出的日志复制出来执行却可以。后面发现有特殊的 UTF8 字符(比如 `\u0000`)这种,替换了这种才解决。
|
17
luckyman 2022-06-17 23:01:28 +08:00 via iPhone
让大家猜谜语呢?
|
18
panerai 2022-06-18 00:13:52 +08:00
总结一下就是:
1. 事务没处理好 2. 缓存 3. 配置不对,连的不是同一个库 |