【问题标题】:Proper workaround - there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause正确的解决方法 - DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列
【发布时间】:2015-04-15 17:33:07
【问题描述】:

我有这张桌子:

CREATE TABLE IF NOT EXISTS news (
  id int(11) NOT NULL AUTO_INCREMENT,
  data text,
  date_published timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  date_edited timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);

给我这个错误:

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

有关于这个问题的旧帖子,但由于当前的数据库结构,我想要一个适当的解决方法。

版本:libmysql - 5.5.41 运行于:5.5.41-ubuntu.14.04.1

【问题讨论】:

  • “由于当前的数据库结构,我想要一个适当的解决方法”你是什么意思?你没有提到 mysql 版本,或者其他答案是什么,这使得它们不合适
  • 现在添加 db 版本

标签: mysql timestamp mysql-error-1293


【解决方案1】:

这是一个硬性限制。最好的办法是让date_edited 使用CURRENT_TIMESTAMP 并在您的应用程序中管理date_published

date_published timestamp NULL DEFAULT NULL,
date_edited timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

触发器可能是一个替代选项,但我尽量不要依赖那些不容易被版本控制的东西。

【讨论】:

  • @sdfgg45 这是一个语法错误。我通常不会亲自写出 SQL - 你应该能够修复。大体思路很清楚。
  • 我只加了你的设置,结果也很清楚,不工作
  • @sdfgg45 正如我所说,1064 是语法错误。我可能没有正确获得数据库模式的确切语法。从根本上说,您的问题的答案是您不能在一个表中有两个 CURRENT_TIMESTAMP 列。您的应用程序将需要管理其中一个。
  • 其中一个日期看起来像:0000000000 它实际上不是我想要的。
  • 再一次,“我想要什么”和“什么是可能的”在这里是不同的东西。
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 2012-06-17
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多