💽
重複を許しちゃったテーブルに重複除去しながらユニーク設定で入れ直すSQL
はじめに
まずそうならないと思いますが、いそぎで内々で突貫でやったらなんか良くなかったわーってなった場合。
ユニークいれて今後は重複除去したいけど、そもそも重複はじかないと設定できないよーって。
ここを参考にしました。
まずは一時的に避難させる
これですが一時ではなく、コピーの方が安全かもですね。
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