2011-12-22 192 views
1
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; 

是否可以設置它,因此它不需要和整個匹配行。 例如:如果列'a'是重複的,那麼更新?Mysql +上的重複密鑰更新

thx

回答

6

ON DUPLICATE KEY就是這麼做的......如果你插入的數據違反了唯一的密鑰要求,把它變成具有導致違規的組合鍵的行的更新。如果你的主鍵只是其中一個字段(例如'a'),並且你已經在表中有一行a = 1,那麼你會得到一個更新,而原來的行會得到'c'集到3.

如果它是一個組合鍵(如'a,b'),那麼如果你有一個現有的記錄,其中a = 1和b = 2,那麼那些行的C會變成3而不是正在創造一項新紀錄。

如果在這個表上沒有唯一/主鍵,那麼你永遠不會得到更新,它只是一個額外的詳細插入語句。

+0

感謝堆 - 瞭解並更新/更改了獨特密鑰的設置方式 - 非常出色......當時間限制過去時會打勾... – Adam 2011-12-22 22:20:58

2

行是否重複是由表上的約束決定的。這將是您的主鍵,以及桌子上的所有唯一鍵。因此,如果您在a列上有非多列唯一索引,那麼它將起作用。

否則,你可能可以通過觸發器來實現。