Got a question, what is/should happen with create_time when somebody runs ALTER TABLE ?
Trying it on InnoDB
mysql> create table t1 (pk int, a int, b int, c int) engine=innodb;
|
Query OK, 0 rows affected (0.03 sec)
|
|
mysql> insert into t1 (pk) values (1);
|
Query OK, 1 row affected (0.00 sec)
|
|
mysql> select create_time, update_time, check_time from information_schema.tables where table_schema=database() and table_name='t1';
|
+---------------------+---------------------+------------+
|
| create_time | update_time | check_time |
|
+---------------------+---------------------+------------+
|
| 2019-09-18 17:03:16 | 2019-09-18 17:03:27 | NULL |
|
+---------------------+---------------------+------------+
|
1 row in set (0.00 sec)
|
mysql> alter table t1 add key(a);
|
Query OK, 0 rows affected (0.02 sec)
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
mysql> select create_time, update_time, check_time from information_schema.tables where table_schema=database() and table_name='t1';
|
+---------------------+---------------------+------------+
|
| create_time | update_time | check_time |
|
+---------------------+---------------------+------------+
|
| 2019-09-18 17:03:55 | 2019-09-18 17:03:27 | NULL |
|
+---------------------+---------------------+------------+
|
1 row in set (0.00 sec)
|
|
mysql> select now();
|
+---------------------+
|
| now() |
|
+---------------------+
|
| 2019-09-18 17:04:12 |
|
+---------------------+
|
1 row in set (0.00 sec)
|
|
mysql> alter table t1 drop key a;
|
Query OK, 0 rows affected (0.02 sec)
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
mysql> select create_time, update_time, check_time from information_schema.tables where table_schema=database() and table_name='t1';
|
+---------------------+---------------------+------------+
|
| create_time | update_time | check_time |
|
+---------------------+---------------------+------------+
|
| 2019-09-18 17:04:17 | 2019-09-18 17:03:27 | NULL |
|
+---------------------+---------------------+------------+
|
1 row in set (0.01 sec)
|
So, for in-place ALTER TABLE:
- create_time is updated
- update_time does not change
mysql> alter table t1 add primary key (pk);
|
Query OK, 0 rows affected (0.03 sec)
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
mysql> select create_time, update_time, check_time from information_schema.tables where table_schema=database() and table_name='t1';
|
+---------------------+-------------+------------+
|
| create_time | update_time | check_time |
|
+---------------------+-------------+------------+
|
| 2019-09-18 17:10:17 | NULL | NULL |
|
+---------------------+-------------+------------+
|
if ALTER TABLE requires table rebuild:
- create_time is updated
- update_time is set to NULL
An observation by marko : in InnoDB, the Update_time is non-persistent, the data is only stored in InnoDB's in-memory structure. (This is important, as maintaining a fast-changing value on disk would cause IO overhead or require some clever tricks).
Check_time is always NULL for InnoDB tables.