"ALTER IGNORE"を使用して重複しないインデックスを追加すると、重複を削除し、あなたがやりたいように聞こえる一意のレコードを強制するのに役立ちました。したがって、構文は次のようになります。
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
これにより、一意の制約が効果的に追加され、重複するレコードがなくなることを意味し、IGNOREは既存の重複を削除します。
ここでALTER IGNOREの詳細を読むことができます:http : //mediakey.dk/~cc/mysql-remove-duplicate-entries/
更新:@Inquisitiveから、MySql> 5.5のバージョンではこれが失敗する可能性があることが通知されました:
MySQL> 5.5、InnoDBテーブル、およびPerconaでは、InnoDB高速インデックス作成機能[ http://bugs.mysql.com/bug.php?id=40344]が原因で失敗します。この場合、最初に実行set session old_alter_table=1
してから、上記のコマンドが正常に動作します
更新ALTER IGNORE
-5.7で削除
ドキュメントから
MySQL 5.6.17以降、IGNORE句は非推奨になり、使用すると警告が生成されます。IGNOREはMySQL 5.7で削除されました。
MySQL開発者の1つは2つの選択肢を提供します。
- 一意のフィールドでグループ化し、上記のように削除します
- 新しいテーブルを作成し、一意のインデックスを追加し、を使用します
INSERT IGNORE
。例:
CREATE TABLE duplicate_row_table LIKE regular_row_table;
ALTER TABLE duplicate_row_table ADD UNIQUE INDEX (id, another_id);
INSERT IGNORE INTO duplicate_row_table SELECT * FROM regular_row_table;
DROP TABLE regular_row_table;
RENAME TABLE duplicate_row_table TO regular_row_table;
しかし、テーブルのサイズによっては、これは実用的でない場合があります