2013-03-31 95 views
2

我想要做的只是增加它應該已經存在的值的第4列, col0 = valuecol0 AND col2 = valuecol2在表中。 否則,我想插入行,當然。INSERT ... ON DUPLICATE KEY UPDATE(兩個要比較的鍵)

INSERT INTO tablename (col0, col1, col2, col3) 
VALUES (valuecol0, valuecol1, valuecol2, valuecol3) 
ON DUPLICATE KEY UPDATE col3 = col3 + VALUES(col3); 

反正我想不出我應該如何設置索引的表,我的文檔here在閱讀頁,但它wans't很大的幫助。所以我嘗試了所有四種可能的組合,沒有人工作!

我在哪裏失敗?

回答

3

要生成一個鍵衝突,你可以使用一個唯一索引:

create unique index IX_YourTable_Col0Col2 on YourTable (col0, col2); 

有了這個指標,你可以使用on duplicate key update語法:

insert into YourTable (col0, col1, col2, col3) 
values (1, 2, 1, 2) 
on duplicate key update col3 = col3 + 2; 

Example at SQL Fiddle.

+0

謝謝!你能解釋我這一行:在YourTable(col0,col2)上創建唯一索引IX_YourTable_Col0Col2;具體來說:名稱IX_YourTable_Col0Col2尊重什麼約定?你會如何閱讀整個系列? – doplumi

+0

'IX_YourTable_Col0Col2'只是一個名字。前綴應該是'UX_'的唯一索引:)第三個變體是用於主鍵的'PK_'。對於整行,請參閱['create index']的文檔(http://dev.mysql.com/doc/refman/5.0/en/create-index.html) – Andomar

相關問題