MySQL TIMESTAMP 2つ以上のCURRENT_TIMESTAMP

MySQL TIMESTAMP をデフォルト値として持つテーブル作成する時、
2つ以上の TIMESTAMP で、デフォルト値をセットしようとするとダメである。

でも、以下は、古いMySQLの話、、

MySQL5.7 以上なら、、

MySQL 複数のTIMESTAMP DEFAULT CURRENT_TIMESTAMP - Oboe吹きプログラマの黙示録

ーーーーーーーーーーーーーーーー
例)

DELIMITER //
DROP TABLE IF EXISTS pointinfo;
//
CREATE TABLE pointinfo (
   id INT NOT NULL AUTO_INCREMENT
 , point INT NOT NULL
 , created_at TIMESTAMP NOT NULL
  DEFAULT CURRENT_TIMESTAMP

 , update_at  TIMESTAMP NOT NULL
  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

 , PRIMARY KEY (id) )
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin ;
//
DELIMITER ;

これは、以下のエラーが発生する。

Error Code: 1293. Incorrect table definition; there can be only one TIMESTAMP column
with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 0.000 sec

が、発生する。

デフォルトで、CURRENT_TIMESTAMP をセットする TIMESTAMP の存在は、1つしか許されない。

そこで、TIMESTAMP 型は、NOT NULL 制約に対して NULL を挿入する場合、強制的に現在時刻で挿入される
ことを利用して、

DELIMITER //
DROP TABLE IF EXISTS pointinfo ;
//
CREATE TABLE pointinfo (
   id INT NOT NULL AUTO_INCREMENT
 , point INT NOT NULL
 , created_at TIMESTAMP NOT NULL DEFAULT 0
 , update_at  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
 , PRIMARY KEY (id) )
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin ;
//
DELIMITER ;

データ作成、、

INSERT INTO pointinfo ( point, created_at )
VALUES (12, null), (13, null), (14, null), (15, null);

のように、insert で NULL を指定する約束にする。

INSERT INTO pointinfo ( point )
VALUES (30); -- created_at は、 '0000-00-00 00:00:00' が入ってしまう。