更新语句 MySQL 将 `WHERE` 条件更改为 `AND` 产生了错误的结果

update statement MySQL changing `WHERE` condition with `AND` produced wrong results

我有以下 table 它有更多列,但它们不相关:

CREATE TABLE `vicidial_lists` (
      `list_id` bigint(14) unsigned NOT NULL,
      `list_name` varchar(50) DEFAULT NULL 
                               );

错误地在以下查询中错误地将 WHERE 条件替换为 AND 并且未使用限制:

update vicidial_lists set list_name = replace(list_name, '15.10.2021', '15.11.2021') and list_id IN (73227,73228,73229,73230,73231) ;

此查询将 table vicidial_lists 的所有 list_names 更改为大部分 01.

中的一些记录
LIST ID LIST NAME
73227       0  
73228       0
73229       0
73231       1

问题已解决,我从备份中返回了正确的名称。 我试图在 MySQL 文档中阅读有关此行为的信息,或者它是否被列为错误,但我没有找到任何内容。 我试图理解为什么会这样。

我的问题,比较明白为什么是:

Has anyone faced the same behavior , is it listed as a bug ? Any link provided with related information would be greatly appriciated.

MySQL版本:5.6.28

这不是错误,而是 MySQL 中的有效语句。

当缺少 WHERE 子句时,UPDATE 将在所有行上完成。您为 list_name 列设置的值将是以下布尔表达式的结果:

replace(list_name, '15.10.2021', '15.11.2021') and list_id IN (73227,73228,73229,73230,73231)

成为:

TRUE AND TRUE => 1

TRUE AND FALSE => 0

replace-函数 returns 一个字符串(将被评估为 TRUE)和 IN-子句将评估 TRUE 或 FALSE。 TRUE 和 FALSE 在 MySQL 中被处理为 1 和 0,因此 list_name 将接收 0 或 1。