【发布时间】: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