为什么 MySql update 忽略 where 子句?

Why does MySql update ignore where clause?

我想找到 table 中特定列中包含未格式化文本的所有行并重新设置格式。更新似乎是正确的选择,但它失败了。例如这个 table:

CREATE TABLE `test` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`));
INSERT INTO `test` (name) VALUES ('jerk'),('cad'),('slouch'),('slime');

运行 以下更新将 ! 添加到每个不包含它的名称(但不是包含它的名称)忽略 where 子句并始终更新:

UPDATE test SET name = CONCAT(name, '!') WHERE LOCATE(name, '!') = 0;

重复应用此更新不断添加更多 !name.

的末尾

这是怎么回事,我该如何进行条件更新?

编辑:修正错别字 WHERELOCATE -> WHERE LOCATE

看来您对 LOCATE 的论点是倒退的。它是 LOCATE(substr, str)。 http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_locate