MySQLでの「current_timestamp」はテーブル内で一つだけ

MySQL でテーブルを作成する際、以下のエラーが出た。

#1293 – Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

原因
登録日時・更新日時の timestamp型のカラムを2つ用意し、両方のデフォルト値に「current_timestamp」を設定したため

解決方法
登録日のデフォルト値を「0」に設定する(insert時に手動で入れる運用に)。

1.timestamp型のcurrent_timestampについて

timestamp型は、データの登録日時や更新日時を保存するため、テーブルにそれ用のカラムを作成することが多い(よね!?)。
「current_timestamp」は、その timestamp型に設定できる、デフォルト値の一つ。

しかし、「current_timestamp」を2つ設定し、create table すると上記のエラーが発生する。
テーブルに設定できる「current_timestamp」は、1つだけ。

timestamp型のカラムが2つあるテーブルを作成する際、デフォルト値を明示しなければ、最初の timestamp型のデフォルト値が「current_timestamp」となる。
それ以降の timestamp型のデフォルト値は「0」となる(「0000-00-00 00:00:00」が入る)。

すごい単純なことだけど、知らなかった・・・

2.作成日時と更新日時

今回、登録日時・更新日時のカラムを作成した。
(どうでもいいけどこの作成日時、登録日時や挿入日時、生成日時など色んな呼び方あるな・・・)

両方のカラムに自動で「current_timestamp」を挿入するのは無理そう。
片方はプログラムで対応しなければ。

今回は登録日のデフォルト値を「0」に設定する。
Insert 時に、プログラムのほうで現在時刻を取得する。

insert into sample_tbl (regist_time) value(current_time);

参考

[MySql] 登録日時の初期値と更新日時の自動更新 | So-Kai-App Note

デフォルト値の設定(DEFAULT) – テーブルの作成 – MySQLの使い方

コメント

タイトルとURLをコピーしました