MySQL CURRENT_TIMESTAMP在创build和更新

我想定义将有2个TIMESTAMP字段的表,如下所示:

CREATE TABLE `msgs` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `msg` VARCHAR(256), `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) 

如何做到这一点避免错误:

 ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

ts_update在表模式中保持ts_createts_update所需行为。

这是mySQL的限制, 不能有两个引用CURRENT_TIMESTAMP的默认值的TIMESTAMP列。 唯一的方法是使用ts_create的DATETIMEtypes,不幸的是它不能有一个默认值NOW()。 你可以推出自己的触发器来实现这一点。

猜猜这是一个旧的职位,但实际上,我猜MySQL支持2 TIMESTAMP在其最近的版本MySQL 5.6.25多数民众赞成在即时使用截至现在。

您正在使用较旧的MySql版本。 更新你的myqsl到5.6.5+它会工作。

您的表上不能有两个TIMESTAMP列具有相同的默认值CURRENT_TIMESTAMP。 请参阅此链接: http : //www.mysqltutorial.org/mysql-timestamp.aspx

我认为可以通过使用下面的技术

 `ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

我想你也许需要ts_create作为date时间(所以重命名 – > dt_create),只有ts_update作为时间戳? 这将确保一旦设置就保持不变。

我的理解是,date时间是手动控制的值,时间戳有点“特殊”,MySQL将为您维护它。 在这种情况下,datetime因此是ts_create的一个好select。

我会说你不需要在你的ts_update上有DEFAULT CURRENT_TIMESTAMP:如果它是空的,那么它不会被更新,所以你的'上次更新'是ts_create。

这是Mysql在较早版本中的一个小小的限制,实际上在版本5.6以后,多个时间戳可以工作。