💽

重複を許しちゃったテーブルに重複除去しながらユニーク設定で入れ直すSQL

2023/03/15に公開

はじめに

まずそうならないと思いますが、いそぎで内々で突貫でやったらなんか良くなかったわーってなった場合。
ユニークいれて今後は重複除去したいけど、そもそも重複はじかないと設定できないよーって。

ここを参考にしました。
https://qiita.com/aosho235/items/d748dcb6386d8ce75604

まずは一時的に避難させる

これですが一時ではなく、コピーの方が安全かもですね。

https://tamoc.com/mysql-copy-table/

CREATE TEMPORARY TABLE target_table_tmp AS SELECT DISTINCT * FROM target_table;

一時的ならこうですね。
で、target_tableは空にしてしまいます。

truncate table target_table;

で、いそいそとユニークを定義しまして、以下を実施して値を戻します。

INSERT INTO target_table SELECT * FROM target_table_tmp ON DUPLICATE KEY UPDATE updated = now();

重複は「ON DUPLICATE KEY UPDATE」で更新日だけ今にしとけって感じで空ぶらせ??ます。
これで重複なしでユニークがついたバージョンのテーブルに早変わりです。

早変わりするかどうかはレコード数によるけど...

Discussion