我想定义具有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
的所需行为。
答案 0 :(得分:54)
这是mySQL的限制,你不能有两个TIMESTAMP列,其默认值引用CURRENT_TIMESTAMP。唯一的方法是对ts_create使用DATETIME类型,遗憾的是它不能具有默认值NOW()。你可以使用自己的触发器来实现这一目标。
答案 1 :(得分:13)
猜猜这是一个老帖子,但实际上我猜mysql在其最新版本的mysql 5.6.25中支持2个TIMESTAMP,这就是我现在使用的内容。
答案 2 :(得分:5)
您使用的是较旧的MySql版本。将myqsl更新为5.6.5+它将起作用。
答案 3 :(得分:2)
我认为可以使用以下技术
`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
答案 4 :(得分:1)
您的表上不能有两个TIMESTAMP列,其默认值为CURRENT_TIMESTAMP。请参阅此链接:http://www.mysqltutorial.org/mysql-timestamp.aspx
答案 5 :(得分:0)
我想你可能希望ts_create为datetime(所以重命名 - > dt_create)并且只将ts_update作为时间戳?这将确保它一旦设置就保持不变。
我的理解是datetime是手动控制的值,而timestamp有点“特殊”,因为MySQL会为你维护它。在这种情况下,datetime是ts_create的一个不错的选择。
答案 6 :(得分:0)
我会说你不需要在ts_update上使用DEFAULT CURRENT_TIMESTAMP:如果它是空的,那么它就不会更新,所以你的'last update'是ts_create。
答案 7 :(得分:0)
这是旧版本中Mysql的一个微小限制,实际上是在5.6及更高版本之后多个时间戳工作...
答案 8 :(得分:0)
你可以试试这个
ts_create
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
更新CURRENT_TIMESTAMP上的ts_update
TIMESTAMP DEFAULT NULL