MySQL timestamp型の値を自動更新するためのcreate文 [MySQL]
create table sample(
:
create_date timestamp DEFAULT CURRENT_TIMESTAMP COMMNET '作成日時',
update_date timestamp DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新日時'
);
この構文で間違いないのですが、なぜかバージョン5.1だと以下のエラーメッセージ。
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
「there can be only one TIMESTAMP column with CURRENT_TIMESTAMP」
ひとつのTIMESTAMPカラムにしかCURRENT_TIMESTAMP使用できない???
いろいろ調べるとMySQLの方言だとか…
これだと使い方が限られるので、yumを使って5.6にバージョンアップ。
(この作業も一苦労でした)
同じSQLを実行したところ問題なくテーブル作成できました。
show create table sample;
| sample | CREATE TABLE `sample` (
:
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日',
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日',
:
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
- メディア: 大型本
JavaからMySQLへの接続でエラー [MySQL]
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
調べてみたら、MySQLデーモン(LINUX環境です)が起動していない。
MySQL稼働サーバは本日メンテナンス日で早朝にOSリブート後、MySQLデーモンを起動していなかったため。