MySQL 更新 returns 0 行受影响,而 select returns 结果
MySQL update returns 0 rows affected while select returns results
select * from t_circle
where status = 0 and author_phone = 13511111111
and id in (
1,
2,
3
)
;
returns 状态为 0 的 3 行。
但以下具有相同条件的更新查询 returns 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
我知道你客户端的用户权限有问题
通过比较我在 GUI 中更改某些内容时生成的 sql 查询和我自己的查询。我发现原因是我将 update
拼错为 udpate
。现在我开始怀疑 mysql 怎么能不抱怨语法错误而只是 returns 和 0 rows affected
?
好吧,至少现在我知道发生奇怪的事情时该怎么做。
select * from t_circle
where status = 0 and author_phone = 13511111111
and id in (
1,
2,
3
)
;
returns 状态为 0 的 3 行。
但以下具有相同条件的更新查询 returns 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
我知道你客户端的用户权限有问题
通过比较我在 GUI 中更改某些内容时生成的 sql 查询和我自己的查询。我发现原因是我将 update
拼错为 udpate
。现在我开始怀疑 mysql 怎么能不抱怨语法错误而只是 returns 和 0 rows affected
?
好吧,至少现在我知道发生奇怪的事情时该怎么做。