是否有刪除MySQL中重複鍵記錄的方法?MySQL插入重複鍵;刪除?
假設我們在數據庫中有一個具有特定主鍵的記錄,並且我們嘗試使用相同的密鑰添加另一個記錄 - ON DUPLICATE KEY UPDATE
只會更新記錄,但如果已存在,是否有刪除記錄的選項?這是用於點擊按鈕的簡單的輸入/輸出功能。
是否有刪除MySQL中重複鍵記錄的方法?MySQL插入重複鍵;刪除?
假設我們在數據庫中有一個具有特定主鍵的記錄,並且我們嘗試使用相同的密鑰添加另一個記錄 - ON DUPLICATE KEY UPDATE
只會更新記錄,但如果已存在,是否有刪除記錄的選項?這是用於點擊按鈕的簡單的輸入/輸出功能。
最近可能的解決方案是REPLACE
聲明。這裏是documentation for REPLACE。
類似的問題,有人問MySQL Forums和recommended(and only) answer是使用REPLACE
。
是的,但那不是我正在尋找的東西 - 我不想替換數據庫中的項目 - 如果它存在,我想一起擺脫它。 – 2012-07-15 19:56:16
我想唯一的選擇(如果上述是唯一可能的解決方案)在這種情況下將運行單獨的語句 - 首先檢查是否找到記錄,然後根據結果添加或刪除它。 – 2012-07-15 19:57:58
或創建一個'BOOLEAN'或'ENUM'列並將其設置爲0或1,具體取決於您是否需要。 – hjpotter92 2012-07-15 20:00:23
使用REPLACE INTO:
replace into some_table
select somecolumn from othertable
要麼插入新的數據,或者是否存在THR相同的數據將刪除數據,並插入新的
vs vs DUPLICATE UPDATE的性能不同。 REPLACE INTO不會更新記錄 - 它會刪除記錄並重新添加,如果涉及大量數據和索引,則可能需要一段時間...最好使用ON DUPLICATE UPDATE,但他要求刪除ON DUPLICATE DELETE – 2013-08-27 08:25:24
是當然還有MySQL中的解決方案,爲您的問題。
如果你想刪除或跳過新插入的記錄,如果有已經重複記錄在表中的鍵列存在,您可以用忽略這樣的:
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son');
這裏id
列是主鍵在表mytbl
中。這將通過刪除或跳過新的重複記錄在表中插入多個值。
希望這能滿足您的要求。
插入忽略不會刪除任何東西 – 2015-09-25 13:59:35
這是一個變通辦法,但它的工作原理:
創建一個新的列,並調用它do_delete
,或什麼的,使其成爲一個微小的-INT。然後做On Duplicate Key Update do_delete = 1;
根據你的MySQL版本/連接,你可以在同一個語句中執行多個查詢。但是,如果不是,只需在後面單獨運行一個單獨的查詢。無論哪種方式,下一個查詢將只是:Delete From [table] Where do_delete = 1;
。這樣,如果它是一個新的條目,它不會刪除任何東西。如果它不是新條目,則會將其標記爲刪除,然後您可以將其刪除。
我喜歡這個選項 - 並且不需要更改我的更新語句。 – ChiMo 2016-07-05 23:16:36
使用**觸發器** – rekenerd 2012-07-15 20:03:24
謝謝 - 我認爲這是唯一的選擇。 – 2013-04-08 14:48:52