插入重复更新Mysql错误

时间:2011-09-28 07:33:25

标签: mysql sql

我正在尝试使用以下内容插入Mysql中的重复键更新:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, qqqq, 115, 0) ON DUPLICATE KEY 
UPDATE keyword=VALUES(qqqq), client_id=VALUES(115), desc_id=VALUES(0)

但它给了我这个错误:

#1064 - 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 '115), desc_id=VALUES(0)' at line 1

有原因吗?

1 个答案:

答案 0 :(得分:6)

查询的UPDATE部分中的VALUES“function”指的是您在INSERT部分中使用的列名。你想要的是这个:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, 'qqqq', 115, 0) ON DUPLICATE KEY 
UPDATE keyword=VALUES(keyword), client_id=VALUES(client_id), desc_id=VALUES(desc_id);

这样,您可以返回您要插入的任何值;它们可能是计算值,也可能来自SELECT查询。当您进入更复杂的查询时,我认为您会发现这比您尝试的更方便。

大多数情况下,当您使用ON DUPLICATE KEY UPDATE时,除了

之外,您没有理由做任何事情。
UPDATE x=VALUES(x), y=VALUES(y), z=VALUES(z)

表示您要插入的任何列。

如果您真的只想插入为各列指定的值,则省略VALUES();你可以这样做:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, 'qqqq', 115, 0) ON DUPLICATE KEY 
UPDATE keyword='qqqq', client_id=115, desc_id=0

但是,这需要您输入两次所有值,每次更改语句时都必须确保所有值都匹配。

阅读本手册并没有什么坏处,因为错误信息表明: http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html