2011-09-28 37 views
1

我试着用下面的在MySQL重复键更新插入:插入上的重复更新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 

是否有一个原因为什么?

回答

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查询。当你进入更复杂的查询时,我认为你会发现这比你想要做的更方便。

大多数时候,当您使用对重复密钥更新,你不会有任何理由这样做以外的任何其他

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

+0

这是创造#1054 - 在“字段列表”未知列“QQQQ”错误... – user952543

+0

'qqqq' =值你已经提供了,而不是COLUMN – ajreal

+0

id,关键字,client_id,desc_id是值,而qqqq是值为 – user952543