複数カラムでユニークキーを作りたいとき、重複があるとエラーになる
mysql> ALTER TABLE hoge ADD UNIQUE (a,b,c); ERROR 1062 (23000): Duplicate entry 'aiueokakikukekoaaaaa' for key 2
IGNOREをつけると、重複したカラムは最初の分だけ採用されて正常終了する
mysql> ALTER IGNORE TABLE hoge ADD UNIQUE (a,b,c); Query OK, 225165 rows affected (52.52 sec) Records: 225165 Duplicates: 1385 Warnings: 0
ひとつのカラムにユニークキーを作りたいだけなら、重複レコードを削除してしまえば大体問題ない
DELETE FROM hoge WHERE a in (SELECT a FROM hoge GROUP BY a HAVING COUNT(*)>1);
複数カラムのときはどういうクエリーがいいかわからなかったので、テーブルを作り直す方法を採用した
CREATE TABLE piyo LIKE hoge; ALTER TABLE piyo ADD UNIQUE (a,b,c); INSERT IGNORE INTO piyo SELECT * FROM hoge; DROP TABLE hoge; ALTER TABLE piyo RENAME TO hoge;
しかし、ALTER TABLEにIGNOREが使えることが判明したのでボツ。