【问题标题】:MySQL update returns 0 rows affected while select returns resultsMySQL 更新返回 0 行受影响,而选择返回结果
【发布时间】:2021-05-06 09:10:54
【问题描述】:
select * from t_circle
where status = 0 and author_phone = 13511111111
and id in (
1,
2,
3
)
;

返回 3 行,状态为 0。

但以下条件相同的更新查询返回 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

【问题讨论】:

  • 如果基础数据在运行选择和更新之间发生变化,我看不出这怎么可能。您确定您在彼此旁边运行选择/更新并且基础数据没有被更改?
  • 是的,我确定。我什至在更新后运行了选择。仍然弹出相同的 3 行。
  • author_phone的列类型是什么?你知道2147483647 是 MySQL 中可以放入有符号整数列的最大值吗?
  • 它是varchar,我在电话号码中添加了引号并再次尝试但没有任何改变。
  • 此表上是否存在一些 BEFORE UPDATE 触发器?

标签: mysql select sql-update innodb


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我知道你客户的用户权限有问题

    【讨论】:

    • 权限问题会根据错误信息产生。没有 IGNORE 选项。
    猜你喜欢
    • 2016-01-19
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2016-02-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多