2012-06-15 108 views
0

我有一個數據庫表,已經有一個我不需要觸摸的現有值。當我嘗試打電話給我的SQL就像這樣:使用現有值進行重複密鑰更新的問題?

我的表目前看起來是這樣的:

id col1 col2 
5 10 

$ SQL =「INSERT INTO sometable(ID,COL2)VALUES(5,20) 對重複KEY UPDATE id = 5「;

我希望表看起來像這樣我的後插入:

id col1 col2 
5 10 20 

有沒有辦法做到這一點不使用更新?

回答

0

假設id是關鍵

INSERT INTO sometable (id, col2) VALUES (5, 20) 
ON DUPLICATE KEY UPDATE id = 5 

說來更新id字段到5(UPDATE ID =5 )。如果ID爲5,因爲這隻會工作,是沒有意義的

你想要的是要麼

INSERT INTO sometable (id, col2) VALUES (5, 20) 
ON DUPLICATE KEY UPDATE col2 = 20; 

或者,如果你要引用的值,如果有則沒有重複的Wilken suggested使用它會一直COL2 = VALUES(COl2)

DEMO

+0

很好的例子,但我的查詢仍然抱怨第二列(col1)沒有默認值。 .. – Paul

+0

@保羅哦,你沒有在你原來的問題中說過。如果col1不可爲空且沒有指定缺省值,那麼如果不將其包含在列列表中,則「INSERT」部分將不起作用。你真的想要插入嗎?如果您想插入col1,col1的值應該是多少? –

1

使用VALUES()

INSERT INTO sometable (id, col2) VALUES (5, 20) 
    ON DUPLICATE KEY UPDATE col2 = VALUES(col2); 
+0

+1。 (我通常試圖包含一個'SET'關鍵字來弄亂語法,並且必須再次查看文檔。) – spencer7593