MYSQL设计表时,需要 两个TIMESTAMP 字段的情况
有时候,数据库表有这样的需求,要一个记录创建时间,一个记录修改时间。
理想中的设计是这样的,更新时间的初始值和创建时间一样:
CREATE TABLE `test_table` ( `id` INT( 10 ) NOT NULL, `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE = INNODB;
或者是这样的,更新时间初始值为空,只有在更新的时候才有值:
CREATE TABLE `test_table` ( `id` INT( 10 ) NOT NULL, `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE = INNODB;
这样的建表SQL,是执行不了的,执行时报错,估计这个很多人遇到过吧:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
网上找到个解决方法(只适用于更新时间的初始值和创建时间一样,当然这个也说得过去):
CREATE TABLE `test_table` ( `id` INT( 10 ) NOT NULL, `create_time` TIMESTAMP NOT NULL DEFAULT 0, `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE = INNODB;
INSERT语句这样写:
INSERT INTO test_table (id, create_time, update_time) VALUES (1, NULL, NULL);
或者这样写(注意,没有写create_time):
INSERT INTO test_table (id, update_time) VALUES (1, NULL);
UPDATE语句正常写法(假设test_table.id可以修改):
UPDATE test_table (id) VALUES (2);