2013年11月14日木曜日

MySQLで更新日時を自動的に設定する

MySQLで更新日時を自動的に設定する

MySQLではTIMESTAMP型を使うと更新日時を自動で更新してくれるようです。

以下の様な感じで試してみました。

  • TIMESTAMP型カラムを持つテーブルを作成
  • TIMESTAMP型カラムにnullでデータを挿入
    • 更新日時が設定されているか確認
  • データの更新
    • 更新日時が再設定されているか確認

TIMESTAMP 型カラムを持つテーブルを作成

※ 型指定以外はなにも付けていません

mysql> CREATE TABLE `tt_test` (
    ->    `ID` int AUTO_INCREMENT NOT NULL
    ->   ,`VALUE` varchar(10) NULL
    ->   ,`LAST_MOD` TIMESTAMP
    ->   ,CONSTRAINT PK_ID  PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc tt_test;
+----------+-------------+------+-----+-------------------+-----------------------------+
| Field    | Type        | Null | Key | Default           | Extra                       |
+----------+-------------+------+-----+-------------------+-----------------------------+
| ID       | int(11)     | NO   | PRI | NULL              | auto_increment              |
| VALUE    | varchar(10) | YES  |     | NULL              |                             |
| LAST_MOD | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+-------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.01 sec)

Default と Extra が勝手に設定される仕様のようです。

まずは、データを挿入してみます。

mysql> insert into tt_test values (null, 'val1', null);
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt_test values (null, 'val2', null);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt_test;
+----+-------+---------------------+
| ID | VALUE | LAST_MOD            |
+----+-------+---------------------+
|  1 | val1  | 2013-11-13 17:48:14 |
|  2 | val2  | 2013-11-13 17:48:15 |
+----+-------+---------------------+
2 rows in set (0.00 sec)

おお。作成日時が自動的に設定されました。

次に、データを更新してみます。

mysql> update tt_test set value = 'val3' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from tt_test;
+----+-------+---------------------+
| ID | VALUE | LAST_MOD            |
+----+-------+---------------------+
|  1 | val3  | 2013-11-13 17:48:19 |
|  2 | val2  | 2013-11-13 17:48:15 |
+----+-------+---------------------+
2 rows in set (0.00 sec)

更新されていますね。

何も考えずに(?)TIMESTAMP型を使用すると、上記のような動きをします。

本記事の内容には下記サイトを参考にさせていただきました。

デフォルト値の設定(DEFAULT) - テーブルの作成 - MySQLの使い方

Enjoy!


Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly