私はそれを次のようにします:
-
既存のテーブルから一時テーブルを作成します:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
必要なレコードだけを一時テーブルに入力します:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
テーブルを空にします
TRUNCATE TABLE table_with_dupes_in_it
-
一時テーブルから元のテーブルにデータを返す
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
クリーンアップ
DROP TEMPORARY TABLE data_to_keep
問題のテーブルが大きい場合、これは大量のメモリやストレージを消費する可能性があることに注意してください。大きなテーブルの場合は、DBサーバーのメモリを過剰に消費しないように、一時テーブルではなく実際のテーブルを使用する傾向があります。
追加する編集:
部分的な重複(一部のデータのみが以前に入力されたデータと同一である行)が心配な場合は、GROUPBYを使用することをお勧めします。 GROUP BYを使用する場合、MySQLを制限して、すべてではなく、指定されたデータを含む1つの行のみを返すようにすることができます。
SELECT *
FROM table
GROUP BY column_name
また、重複データを保持したくない列にUNIQUEインデックスを使用することを検討する必要があります。これにより、ユーザーは最初から重複データを挿入できなくなります。