MySQL5.6.5からDATETIME型で行生成時刻と更新時刻を自動でセットすることができるようになりましたよ

by @dekokun on 2014/05/31 20:46

Tagged as: MySQL.

どうも。先日結婚式を挙げました。二次会のために手作りの巨大くす玉を作るノウハウを手に入れましたのでそのあたりもいずれブログに書きたいですね。

概説

MySQL5.6.5から、DATETIME型でも行の生成時刻と更新時刻を自動更新できるようになりましたよ。

方法

作成時刻は DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP で

更新時刻は DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP で宣言しましょう

参照:How do you set a default value for a MySQL Datetime column?

以下、MySQL5.6.17で検証

テーブル生成

mysql> CREATE TABLE foo (
         `id` INT(11),
         `creation_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
         `modification_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
         PRIMARY KEY (id)
       );
Query OK, 0 rows affected (0.12 sec)

生成時刻自動挿入のテスト

mysql> insert into foo (id) VALUES (1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from foo;
+----+---------------------+---------------------+
| id | creation_time       | modification_time   |
+----+---------------------+---------------------+
|  1 | 2014-05-31 21:25:09 | 2014-05-31 21:25:09 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)

更新時刻自動挿入のテスト

mysql> update foo set id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from foo;
+----+---------------------+---------------------+
| id | creation_time       | modification_time   |
+----+---------------------+---------------------+
|  2 | 2014-05-31 21:25:09 | 2014-05-31 21:25:59 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)

注意

この設定が性能面にどのような影響をあたえるかは検証しておりません。

あれ、以前MySQL5.6.13くらいで検証した時はDEFAULT CURRENT_TIMESTAMPを2カラムに設定できなかったような記憶があるが5.6.17ではできているな。

comments powered by Disqus