MySQL ON DUPLICATE KEY UPDATE问题

5

你好,有人能否看一下这个问题并告诉我哪里出错了。我有一个SQL语句,在使用PHP时,当我将其输出到屏幕上时,会得到以下结果:

INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '18' , 'GenreName' = 'Drama' ON DUPLICATE KEY UPDATE 'GenreName' = 'Drama' WHERE 'GenreID' = '18'
INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '16' , 'GenreName' = 'Animation' ON DUPLICATE KEY UPDATE 'GenreName' = 'Animation' WHERE 'GenreID' = '16'

以下是声明内容:

$sql="INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '{$genresID[$i]}' , 'GenreName' = '{$genreName[$i]}' ON DUPLICATE KEY UPDATE 'GenreName' = '{$genreName[$i]}' WHERE 'GenreID' = '{$genresID[$i]}'";

这是我收到的错误信息:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''moviedb'.'genre' SET 'GenreID' = '18' , 'GenreName' = 'Drama' ON DUPLICATE KEY ' at line 1

任何帮助都将不胜感激,提前致谢。
3个回答

9

你不能在 ON DUPLICATE KEY 中使用 WHERE 语句。

移除 WHERE 子句,MySql 将只更新导致重复键的行。

对于多行 INSERT,使用 VALUES() 来告诉 MySql 更新将要插入的值,例如:

INSERT INTO moviedb.genre (GenreID,GenreName)
VALUES ('18', 'Drama'),
    ('16', 'Animation')
ON DUPLICATE KEY UPDATE
  GenreName = VALUES(GenreName);

谢谢大家……我花了很长时间才弄清楚那个问题。每个人都应该得到一个勾勾。 - RonanC

3

您引用了mysql字段...

您应该使用反引号(`)而不是单引号... 单引号用于值,反引号用于字段。

INSERT INTO `moviedb`.`genre` SET `GenreID` = '18' , `GenreName` = 'Drama' ON DUPLICATE KEY UPDATE `GenreName` = VALUES(`GenreName`);
INSERT INTO `moviedb`.`genre` SET `GenreID` = '16' , `GenreName` = 'Animation' ON DUPLICATE KEY UPDATE `GenreName` = VALUES(`GenreName`);

1
这是完全相同的错误吗?正如Scrum Meister所说,在ON DUPLICATE KEY中去掉where...它会自动执行重复行。 - Jacob
1
好的,已经排好序了,非常感谢。深夜编程对我的思维过程产生了影响。再次感谢。 - RonanC

1
INSERT INTO `moviedb`.`genre` SET `GenreID` = '18' , `GenreName` = 'Drama' ON DUPLICATE KEY UPDATE `GenreName` = 'Drama' WHERE `GenreID` = '18'
INSERT INTO `moviedb`.`genre` SET `GenreID` = '16' , `GenreName` = 'Animation' ON DUPLICATE KEY UPDATE `GenreName` = 'Animation' WHERE `GenreID` = '16'

然后你就准备好了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接