74

我想定义有 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_create行为ts_update

4

8 回答 8

20

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

于 2016-02-16T07:59:45.217 回答
7

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

`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
于 2015-03-05T10:52:24.857 回答
5

您正在使用较旧的 MySql 版本。将您的 myqsl 更新到 5.6.5+ 即可。

于 2015-04-28T15:51:28.847 回答
1

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

于 2014-09-30T00:44:45.970 回答
0

我想你可能想要 ts_create 作为日期时间(所以重命名 - > dt_create)并且只有 ts_update 作为时间戳?这将确保它在设置后保持不变。

我的理解是 datetime 是用于手动控制的值,而时间戳有点“特殊”,因为 MySQL 会为您维护它。在这种情况下,日期时间因此是 ts_create 的不错选择。

于 2011-02-04T10:40:27.757 回答
0

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

于 2011-02-04T10:45:21.180 回答
0

这是 Mysql 在旧版本中的微小限制,实际上在 5.6 及更高版本之后多个时间戳有效......

于 2017-10-12T14:19:06.253 回答
0

你可以试试这个 ts_createTIMESTAMP DEFAULT CURRENT_TIMESTAMP, ts_updateTIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP

于 2018-01-24T11:40:10.347 回答