2010-07-22 79 views
1

如何刪除違反唯一性約束的數據?MySQL - 刪除違反唯一性約束的數據

我有一張表,我想添加一個唯一性約束。表內數據違反了這個約束,我想刪除它。在這一點上,我不在乎我輸的數據,只是最終的數據是好的。

我第一次嘗試使用'create table like'來複製表,使用alter table添加唯一鍵,並將數據從舊錶複製到新表。

不幸的是,最後一步複製了所有的數據,並沒有抱怨唯一性。

+0

你是如何複製數據的?用INSERT IGNORE? – 2010-07-22 22:59:22

+0

不,我認爲我只是使用插入而不忽略 – justinhj 2010-07-27 18:39:52

回答

3

這將添加唯一索引和下降重複:

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX your_table_index (...); 

the docs

忽視的是一個MySQL擴展到 標準SQL。它控制ALTER TABLE如果在新表中有 唯一鍵存在重複,或者在嚴格模式爲 啓用時發生了 警告,則TABLE將如何工作。如果未指定IGNORE,則 複製將中止並回滾,如果 發生重複鍵錯誤。 如果指定IGNORE ,則只有第一行爲 ,其中 唯一鍵上的行重複,其他衝突行 已刪除。不正確的值是 被截斷爲最接近的匹配值 可接受的值。

+0

好像他已經知道如何做到這一點.. – Ben 2010-07-22 23:01:21

+0

在聲明之前使用'set session old_alter_table = 1;'如果您使用InnoDb - 有一個錯誤,這是解決方法(http://bugs.mysql.com/bug.php?id=40344):) – sensor 2012-11-20 13:54:09