为什么 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
我想找到 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