2015-10-16 77 views
1

編輯:我添加了解決我的問題的鏈接和命令的響應。爲了讓將來的讀者不必擔心他們的未索引表格有重複行,您可以在下面的鏈接或上面的鏈接中找到答案。修復未編制索引的數據庫MySQL

我在我的數據庫中有一個小表搞砸了。它被重複的行與完全相同的信息(包括id)。

有沒有一個查詢我可以用來刪除這些重複的ID,但一個? 我想在這裏先檢查我的答案,如果我刪除該表中它會帶我整個週末再次導入(這是巨大的)...

我想這樣做

DELETE FROM tickets t1, tickets t2 WHERE t1.id = t2.id limit 1; 

我不確定這會工作... 謝謝!

+0

這是什麼意思,你不確定。你試過了嗎? –

+1

您重複了多少行?您可以創建表的備份並刪除所有重複的行,然後使用備份表重新添加它們。你應該真的使用一個唯一的主鍵來避免這個問題。 – Oceans

+0

如果只有一行具有該id,它將不起作用 - 您將刪除該行。 –

回答

1

要找到在id列中的所有副本,你可以嘗試:

select `id` 
    from `tickets` 
    group by `id` 
    having count(`id`)>1; 

我會嘗試這一個GUI(海蒂等)〜然後你可以基地周圍這是你的刪除操作,無論是在手動gui或直接查詢。

2

由於Oceans

CREATE TEMPORARY TABLE tmp_tickets AS SELECT DISTINCT * FROM tickets; 
DELETE FROM tickets; 
INSERT INTO tickets SELECT * FROM tmp_tickets; 
DROP TABLE tmp_tickets; 
+0

這是我的備份解決方案,謝天謝地,我找到了一個更簡單的方法來通過簡單的命令實現這一點。 – Thaenor

0

我設法在這裏Remove duplicate rows in MySQL找到了解決辦法解決這個問題。爲了節省您點擊鏈接查詢看起來是這樣的

ALTER IGNORE TABLE jobs 
ADD UNIQUE INDEX idx_name (site_id, title, company); 

它刪除了所有重複的指標,減一。