2011-10-25 73 views
2
INSERT INTO users (firstname, lastname, email, mobile) VALUES ('Karem', 'Parem', '[email protected]', '123456789'); 

這是我想這樣做,但如果使用相同的電子郵件[email protected]行已經存在,那麼它應該更新這些值該行。插入,如果它已經存在更新的列SQL

我發現http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html,但我不明白它

+1

你不明白什麼?你試過了嗎?發生了什麼?到目前爲止,你有什麼? –

+0

可能的重複[如何更新如果存在,如果不插入(又名upsert或合併)在MySQL?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists- insert-if-not-aka-upsert-or-merge-in-mysql) –

回答

5

使用ALTER TABLEemail列添加一個唯一約束,則嘗試此查詢:

INSERT INTO users(firstname, lastname, email, mobile) 
VALUES ('Karem', 'Parem', '[email protected]', '123456789') 
ON DUPLICATE KEY UPDATE 
    firstname = 'Karem', 
    lastname = 'Parem', 
    email = '[email protected]', -- you can probably omit this 
    mobile = '123456789' 

不過要小心 - 如果你對你的表定義的任何其他獨特的鍵(包括主鍵,這是根據定義唯一的),那麼他們也可以觸發更新。

+0

非常不錯的功能! –

+0

我如何說它應該尋找獨特的電子郵件?該電子郵件有一個索引名稱爲「uniq_email」的唯一索引 – Karem

+0

@Karem:你不能。 MySQL會考慮所有的唯一索引。 –

1

通過使用triggers但恕我直言,檢查主鍵的存在插入之前實現這一目標/更新是比較合適的:

  • 觸發器可能導致併發問題,'插入或更新'可以使用交易來屏蔽這些問題
  • 您的代碼將更具可讀性
  • 它會更有效
相關問題