MYSQL 一个很奇怪的现象,有没有遇到过的兄弟帮忙解惑一下~

在mysql5.7版本中执行此sql语句

update `tables` set `title` = "xxxx", `sort` = "15", `status` = "1", `tables`.`updated_at` = "2022-08-28 20:13:04" where `id` = 1

结果显示
MYSQL 一个很奇怪的现象,有没有遇到过的兄弟帮忙解惑一下~
影响函数为1,但是影响的结果缺跟预期的不一样。
实际结果:tables表里面的所以记录的status都被更新为了1
期望结果:tables表记录为1的status更新为1

备注:status字段类型为tinyint 而sort字段类型为unsigned int ,把sql语句改成

update `tables` set `title` = "xxxx", `sort` = 15, `status` = 1, `tables`.`updated_at` = "2022-08-28 20:13:04" where `id` = 1

则正常预期。

有没有遇到过的大佬帮忙解惑解惑:dizzy_face:

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

时间都差了一分多钟,确认不是业务代码更新的吗,可以把业务代码php服务先停了再试试,再检查下mysql有没有设置触发器函数,往往奇怪的问题就是低级的错误。百分九十以上是你业务代码的问题

1年前 评论
CodeUndefined (楼主) 1年前
CodeUndefined (楼主) 1年前
讨论数量: 15

表结构
CREATE TABLE `tables` ( `id` int(11) NOT NULL, `status` tinyint(4) DEFAULT NULL, `sort` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

file

file

未复现

1年前 评论

show your table!

1年前 评论
 mysql5.7版本,没复现出来

file

file

1年前 评论
╰ゝSakura

file

此图中不是说 受影响行数为1嘛,那肯定是更新了1行数据,怎么可能全表都更新了

1年前 评论

语句执行之前

file

语句执行之后

file

语句执行之后(改变两个字段)

file

表结构

file

1年前 评论
aaccbb 1年前
CodeUndefined (作者) (楼主) 1年前

时间都差了一分多钟,确认不是业务代码更新的吗,可以把业务代码php服务先停了再试试,再检查下mysql有没有设置触发器函数,往往奇怪的问题就是低级的错误。百分九十以上是你业务代码的问题

1年前 评论
CodeUndefined (楼主) 1年前
CodeUndefined (楼主) 1年前

未能复现你的问题,我这边这样操作数据是正常的

1年前 评论

这情况可能是业务代码里面的where有问题 我就犯过类似的错误 :sob: :see_no_evil:

1年前 评论
CodeUndefined (楼主) 1年前
CodeUndefined (楼主) 1年前

总结一下:在出现数据库莫名被更新的时候,一定要排除业务层面带来的影响。比如异步队列或者定时任务的东西。我一开始的误区就是我直接执行sql,业务就无法影响我的操作,但这只是同步操作不会影响。在一些异步的业务处理层面上,还是会影响到我的操作。所以在排查问题的时候,我们首先必须要排除掉能够影响到问题流程的其他因素

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!