試した時に使ったバージョンはMySQL Communityの5.7.10です。
DDLとテーブル定義
テーブル定義を見ると、on updateを指定したカラムはExtra列で確認することができる。create table test_table (
id int AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
last_modified TIMESTAMP NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp,
PRIMARY KEY (id)
)
mysql> desc test_table;
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| last_modified | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+
結果
insertやupdate時に対象のカラムを指定しないと、自動的にcurrent_timestampの値が入ることがわかる。update時には、カラムの値が変更されている場合のみ、対象カラムのtaimustampが変更されている。
なお、insertやupdate時に任意の値を直接設定することもできる。
-- INSERT
mysql> insert into test_table (name) values ('hoge');
Query OK, 1 row affected (0.07 sec)
-- 自動的にtimestampが設定される。
mysql> select * from test_table;
+----+------+---------------------+
| id | name | last_modified |
+----+------+---------------------+
| 1 | hoge | 2015-12-14 12:24:09 |
+----+------+---------------------+
1 row in set (0.00 sec)
-- UPDATE
mysql> update test_table set name = 'fuga';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- timestampの値が更新される。
mysql> select * from test_table;
+----+------+---------------------+
| id | name | last_modified |
+----+------+---------------------+
| 1 | fuga | 2015-12-14 12:24:32 |
+----+------+---------------------+
1 row in set (0.03 sec)
-- 値が変更されないUPDATE
mysql> update test_table set name = 'fuga';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
-- timestampは更新されない
mysql> select * from test_table;
+----+------+---------------------+
| id | name | last_modified |
+----+------+---------------------+
| 1 | fuga | 2015-12-14 12:24:32 |
+----+------+---------------------+
1 row in set (0.00 sec)