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型を使用すると、上記のような動きをします。
本記事の内容には下記サイトを参考にさせていただきました。
Enjoy!
Written with StackEdit.
0 件のコメント:
コメントを投稿