首页 > 解决方案 > MySQL 更新返回 0 行受影响,而选择返回结果

问题描述

select * from t_circle
where status = 0 and author_phone = 13511111111
and id in (
1,
2,
3
)
;

返回状态为 0 的 3 行。

但以下具有相同条件的更新查询返回 0 行受影响:

udpate t_circle set status = 2
where status = 0 and author_phone = 13511111111
and id in (
1,
2,
3
);

是否有一个原因?我已经尝试启动事务并提交,但仍然有 0 行受到影响。其他问题的答案建议先运行 select 并确保行已更改,因为如果新值 == 旧值,则认为它受到影响。我已经排除了这两种可能性。

注意:这个问题是在我们的生产服务器中发现的(是的,我知道我不应该,但我必须这样做)与 InnoDB 引擎。我可以修改 DBeaver 等 GUI 客户端中的内容,然后单击保存,更改生效,但不能使用 sql 语句。我想知道这是否与我的帐户授权有关?

解决!这是因为我拼错了UPDATE。当我mysql>在命令行中使用时,使用 'udpate' 进行更新只会给出Query OK, 0 rows affected. 我的mysql的版本是5.7

标签: mysqlselectsql-updateinnodb

解决方案


当我在 GUI 和我自己的查询中更改某些内容时,通过比较 GUI 生成的 sql 查询。我发现原因是我拼错update了 to udpate。现在我开始想知道 mysql 怎么能不抱怨语法错误而只是返回0 rows affected

好吧,至少现在我知道当奇怪的事情发生时该怎么做。


推荐阅读