2013-01-11 57 views
2

我知道,如果存在或想要更新行,或者以其他方式插入,我可以使用「ON DUPLICATE KEY UPDATE」。 但在我的情況下,我想基於非唯一鍵進行更新。如果存在其他更新插入,但帶有非唯一列

例如:我有一個3列的表:A,B和C.所有這些一起形成唯一的關鍵。
現在我想更新行,如果B和C的值匹配,或者插入一個新行。

這可以在沒有多個查詢的MySQL中完成。

+1

假定您的意思是「列」而不是「行」 ?如果在列匹配時總是更新(而不是插入),那麼無論如何你最終都會遇到唯一性約束 - 那麼爲什麼不把它包含在你的模式中呢?或者有沒有偶爾插入現有的「重複」記錄? – eggyal

+0

否唯一性永遠不會破壞 –

+1

那麼,如果A,B,C一起構成一個唯一鍵 - 當B和C匹配時,如何選擇要更新的行,可以有多個更新。這就是爲什麼重複鍵更新不起作用。如果你說你只是更新所有匹配的行,你會導致重複的鍵錯誤 –

回答

0

如果有唯一鍵,則可以使用REPLACE INTO。如果您沒有這些唯一值,則需要使用兩個查詢。查詢1是用於更新的選擇,查詢2是更新(如果返回的行數大於0)或插入(如果沒有行返回)

相關問題