揮発性のメモ2

http://d.hatena.ne.jp/iww/

hoge

複数カラムでユニークキーを作る

複数カラムでユニークキーを作りたいとき、重複があるとエラーになる

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 TABLEIGNOREが使えることが判明したのでボツ。