2012-07-15 76 views
13

是否有刪除MySQL中重複鍵記錄的方法?MySQL插入重複鍵;刪除?

假設我們在數據庫中有一個具有特定主鍵的記錄,並且我們嘗試使用相同的密鑰添加另一個記錄 - ON DUPLICATE KEY UPDATE只會更新記錄,但如果已存在,是否有刪除記錄的選項?這是用於點擊按鈕的簡單的輸入/輸出功能。

+3

使用**觸發器** – rekenerd 2012-07-15 20:03:24

+0

謝謝 - 我認爲這是唯一的選擇。 – 2013-04-08 14:48:52

回答

1

最近可能的解決方案是REPLACE聲明。這裏是documentation for REPLACE

類似的問題,有人問MySQL Forumsrecommended(and only) answer是使用REPLACE

+0

是的,但那不是我正在尋找的東西 - 我不想替換數據庫中的項目 - 如果它存在,我想一起擺脫它。 – 2012-07-15 19:56:16

+0

我想唯一的選擇(如果上述是唯一可能的解決方案)在這種情況下將運行單獨的語句 - 首先檢查是否找到記錄,然後根據結果添加或刪除它。 – 2012-07-15 19:57:58

+0

或創建一個'BOOLEAN'或'ENUM'列並將其設置爲0或1,具體取決於您是否需要。 – hjpotter92 2012-07-15 20:00:23

4

使用REPLACE INTO

replace into some_table 
select somecolumn from othertable 

要麼插入新的數據,或者是否存在THR相同的數據將刪除數據,並插入新的

+1

vs vs DUPLICATE UPDATE的性能不同。 REPLACE INTO不會更新記錄 - 它會刪除記錄並重新添加,如果涉及大量數據和索引,則可能需要一段時間...最好使用ON DUPLICATE UPDATE,但他要求刪除ON DUPLICATE DELETE – 2013-08-27 08:25:24

-2

是當然還有MySQL中的解決方案,爲您的問題。

如果你想刪除或跳過新插入的記錄,如果有已經重複記錄在表中的鍵列存在,您可以用忽略這樣的:

insert ignore into mytbl(id,name) values(6,'ron'),(7,'son'); 

這裏id列是主鍵在表mytbl中。這將通過刪除或跳過新的重複記錄在表中插入多個值。

希望這能滿足您的要求。

+1

插入忽略不會刪除任何東西 – 2015-09-25 13:59:35

5

這是一個變通辦法,但它的工作原理:

創建一個新的列,並調用它do_delete,或什麼的,使其成爲一個微小的-INT。然後做On Duplicate Key Update do_delete = 1;

根據你的MySQL版本/連接,你可以在同一個語句中執行多個查詢。但是,如果不是,只需在後面單獨運行一個單獨的查詢。無論哪種方式,下一個查詢將只是:Delete From [table] Where do_delete = 1;。這樣,如果它是一個新的條目,它不會刪除任何東西。如果它不是新條目,則會將其標記爲刪除,然後您可以將其刪除。

+0

我喜歡這個選項 - 並且不需要更改我的更新語句。 – ChiMo 2016-07-05 23:16:36