SSブログ

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必修! )

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

  • 作者: 西沢 夢路
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2012/05/01
  • メディア: 大型本

 


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。