2011-09-28 66 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