创建和更新时的 MySQLCURRENT_TIMESTAMP

我想定义一个有两个 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_createts_update行为。

178504 次浏览

我想您可能希望将 ts _ create 作为 datetime (因此重命名为-> dt _ create) ,而只将 ts _ update 作为 time 戳?这将确保它在设置后保持不变。

我的理解是,datetime 是用于手动控制值的,而时间戳有点“特殊”,因为 MySQL 会为您维护它。在这种情况下,datetime 是 ts _ create 的一个很好的选择。

我想说,您不需要在 ts _ update 上使用 DEFAULT CURRENT _ TIMESTAMP: 如果它是空的,那么它就不会被更新,所以您的“最后一次更新”是 ts _ create。

表上不能有两个默认值为 CURRENT _ TIMESTAMP 的 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

你正在使用旧版本的 myqsl。更新你的 myqsl 到5.6.5 + 它将工作。

我猜这是一篇老文章,但实际上我猜 mysql 在最近的版本 mysql 5.6.25中支持2 TIMESTAMP,这就是我现在使用的。

这是旧版本 Mysql 的一个很小的限制,实际上在5.6版本之后,多个时间戳就可以工作了..。

你可以试试这个 时间戳默认电流 _ 时间戳, 更新电流时间戳的 ts_update时间戳默认为空