MySQL | DEFAULT timestamp に関するテーブル作成エラー
MySQL 5.5 以前では、次のように DEFAULT 値を指定した TIMESTAMP フィールドが 1 つだけの場合、テーブル作成に問題はない。
CREATE TABLE table_a (
time_a timestamp DEFAULT CURRENT_TIMESTAMP
)
しかし、2 つの TIMESTAMP を使用するとエラーが発生する。
CREATE TABLE table_a (
time_a timestamp DEFAULT CURRENT_TIMESTAMP,
time_b timestamp DEFAULT CURRENT_TIMESTAMP
)
エラーメッセージは次のとおりである。
Error Code : 1293
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
これは、1 つのテーブルで CURRENT_TIMESTAMP を DEFAULT として指定できる TIMESTAMP 型のカラムは 1 つだけ、という意味である。
この場合は、次のように 1 つのフィールドだけに DEFAULT CURRENT_TIMESTAMP を指定し、もう一方のカラムは INSERT 時に CURRENT_TIMESTAMP で初期化する必要がある。
CREATE TABLE table_a (
time_a timestamp DEFAULT CURRENT_TIMESTAMP,
time_b timestamp
)
この制限は MySQL 5.6 から解除されているため、mysql-server-5.5 を mysql-server-5.6 にアップグレードすると問題は解決する。
Ubuntu Linux を使用している場合は、次のコマンドでアップグレードできる。
$ sudo apt-get update
$ sudo apt-get install mysql-server-5.6
すでに MySQL 5.5 で管理しているデータベースがあっても、上記のように 5.6 をインストールするとデータベースは自動的に移行されるため、別途 dump を取得して移す必要はない。ただし、万一に備えてインストール前にバックアップを取っておく。