こんにちは、さるまりんです。
こんなケースがあってちょっと、ん?と考えたのでそれについて残しておきます。
データベース上に作られたテーブルがあります。このテーブルにはすでにデータが格納されています。
テーブルが作成時にはレコードの作成日時を格納すカラムを用意しておらず、必要となり後から追加することになりました。
次のALTER TABLE
文で作成日時のカラムcreated
を追加することができます。
デフォルト値はレコード追加日時(現在日時)です。
INSERT
した日時ですね。
ALTER TABLE my_table ADD COLUMN created TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
ここで問題発生。
これまでのデータはどうしよう。。。
↑を実行し、SELECT
でデータを見てみると、これまでのレコードのcreated
として変更された時点の日時が返却されてきました。
もちろんそのデータが作られた日時は分からないので正しいデータを入れることはできない。
なので、せめてそれらについてはnull
にして、以降追加されるレコードには追加された日時を設定するようにしたいと思います。
これを実現するにはALTER TABLE
を2段階にします。
1. まずはデフォルト値をnull
でカラムを追加します。
ALTER TABLE my_table ADD COLUMN created TIMESTAMP;
この段階でここまでのレコードのcreated
はnull
となります。
2. 次に追加したカラムのデフォルト値をCURRENT_TIMESTAMP
(現在日時)に変更します。
ALTER TABLE my_table ALTER COLUMN created SET DEFAULT CURRENT_TIMESTAMP;
これで以降はレコードが追加された日時がcreated
に登録されます。
テーブル作成の段階で作成日時、更新日時を持つべきかどうかは場合によると思います。
運用しながらあれ?やっぱり必要だ!という時に、こんな感じで追加する一つのアイデアでした。
読んでくださってありがとうございました。
それではまた!