我正在尝试使用以下内容插入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
有原因吗?
答案 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