2014-11-05 53 views
0

我們有這個大的'收藏'表,我們遇到了一個問題,發現我們沒有對user,favorite_typefavorite_type的唯一約束的事實, favorite_id。我已經做了一個遷移,將爲這3個索引添加一個索引,但它不起作用,因爲我們現有的數據具有相同的一組條目。那裏面有其他數據太(updated_atcreated_atid)這是沒有失去,反而使得它的不完美匹配。大表中的重複條目在多列中共享相同的值

是否有軌道的方式(3.2.x中)要做到這一點,或(my)SQL的方式?

我知道我可以將它們全部拉出來,然後分組,然後映射到所有額外元素的刪除,但它是一個非常大的表(1mil +),我們不能進行長時間運行的遷移。

回答

2

複製表結構到新表,添加唯一約束,然後將所有的記錄。由於約束,重複項將失敗。

CREATE TABLE tableTmp LIKE table; 

添加約束,然後將所有記錄插入到臨時表中。

INSERT INTO tableTmp SELECT * FROM table 

驗證條目然後刪除並重命名。

DROP TABLE table; 
RENAME TABLE tableTmp TO table; 
+0

Hmhm,將工作。我會給你勾選了一天,想看看是否有人有一些巧妙的導軌招我沒有想到的,但我有一種感覺,用自己的方式將是最好的。 – 2014-11-05 00:47:41

相關問題