MySQLのtimestamp(ちょっとERMasterもあり) [MySQL]
テーブルに作成日時や更新日時を持たせるために、timestamp型を使ったのですが大はまり。
CREATE TABLE XXX(
CREATE_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);
これを実行したところ、
Error Code: 1293. Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 0.016 sec
CURRENT_TIMESTAMPをデフォルトとして利用できるのは、1テーブル内では1カラムだけとのこと。
とりあえず動作確認のため、 手作業でDDL分を修正。
CREATE TABLE XXX(
CREATE_DATE TIMESTAMP DEFAULT 0 NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);
これで無事成功。
そもそもEclipse+ERMasterを使っているので、モデルでCREATE_DATEカラムの初期値を0に修正して、DDLファイルをエクスポートし、実行した。
Error Code: 1067. Invalid default value for 'CREATE_DATE' 0.000 sec
あれ、今度は別のエラーが発生。
自動生成したDDLをよくよくみたら、デフォルト0が文字列扱いに変換されてた。
CREATE TABLE XXX(
CREATE_DATE TIMESTAMP DEFAULT '0' NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);
ERMasterでtimestamp型の初期値は'0000-00-00 00:00:00'にしないとダメでした。
こちらが最終系
CREATE TABLE XXX(
CREATE_DATE TIMESTAMP DEFAULT '0000-00-00 00:00:00' NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);
基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
- 作者: 西沢 夢路
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/05/01
- メディア: 大型本
コメント 0