为什么MySql更新忽略where子句?

时间:2015-11-19 22:04:08

标签: mysql sql-update where where-clause

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

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 - >在哪里定位

1 个答案:

答案 0 :(得分:2)

看起来你的LOCATE参数是倒退的。它的LOCATE(substr,str)。 http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_locate