1つのカラムに複数の情報が混在していた
articlesテーブルのmediaカラムに、画像のパスやyoutubeのリンク情報が混在していたので、youtubeカラムを追加して、youtubeのリンク情報だけ移せないか試してみました。
// 変更前
|id | media | youtube |
|:-:|:---------------------:|:-------:|
| 1 |{"img":"//s3-ap-J***"} |NULL |
| 2 |{"youtube":"NnH*****"} |NULL |
| 3 |{"img":"//s3-ap-I***"} |NULL |
// 変更後
|id |media |youtube |
|:-:|:---------------------:|:---------------------:|
| 1 |{"img":"//s3-ap-J***"} |NULL |
| 2 |NULL |{"youtube":"NnH*****"} |
| 3 |{"img":"//s3-ap-I***"} |NULL |
要件
- mediaカラムの内、"youtube"の文字列があるセルをyoutubeカラムにコピー
- mediaカラムの内、"youtube"の文字列があるセルをNULLに書き換える
成功したSQL文
UPDATE articles A SET A.youtube = A.media, A.media = null WHERE A.media LIKE '%youtube%'
おわり
SET句で同一カラムの変更(情報のコピーとNULLへの書き換え)を同時に書いてますが、順番通りに実行されたようで一安心です。
ただ、今回は件数が少なかっただけで、何万件ものレコードの書き換えがあった場合にどうなるかはわからないです( ˘ω˘ )。