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_TIMESTAMPDEFAULT として指定できる 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.5mysql-server-5.6 にアップグレードすると問題は解決する。

Ubuntu Linux を使用している場合は、次のコマンドでアップグレードできる。

$ sudo apt-get update
$ sudo apt-get install mysql-server-5.6

すでに MySQL 5.5 で管理しているデータベースがあっても、上記のように 5.6 をインストールするとデータベースは自動的に移行されるため、別途 dump を取得して移す必要はない。ただし、万一に備えてインストール前にバックアップを取っておく。