テーブルに重複があり、使用する場合
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
クエリはエラー1062(重複キー)で失敗します。
ただし、IGNORE
を使用する場合
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
重複は削除されます。ただし、ドキュメントには、保持される行が指定されていません:
(ALTERTABLE構文 )
バージョンが5.7.4以降の場合、次のことができます。
- データを一時テーブルにコピーします(技術的には一時テーブルである必要はありません)。
- 元のテーブルを切り捨てます。
- 一意のインデックスを作成します。
- そして、
INSERT IGNORE
を使用してデータをコピーし直します (まだ利用可能です)。
CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * from tmp_data;
DROP TABLE tmp_data;
INSERT...SELECT構文
も参照してください。 および