【问题标题】:getting "only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause" error while it's used only once仅使用一次时出现“在 DEFAULT 或 ON UPDATE 子句中只有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列”错误
【发布时间】:2012-06-17 10:02:12
【问题描述】:

我正在使用以下 sql 创建一个数据库表:

CREATE  TABLE `cs3_ds1` (
`ID` INT NOT NULL ,
`TIME` TIMESTAMP NOT NULL ,
`USER` VARCHAR(45) NOT NULL ,
`TIME1` TIMESTAMP NOT NULL ,
`TIME2` TIMESTAMP NOT NULL ,
`INSERT_TIME` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
 PRIMARY KEY (`ID`) )
 ENGINE = InnoDB

虽然我只在一列中使用当前时间戳作为默认值,但我收到以下错误:

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

为什么会出现这个错误?

【问题讨论】:

  • 您确定要将该列设为NULLable 并设置默认值吗?
  • @Dems 很抱歉,它不应该为空。但我正在尝试不同的方法来看看它是否有效。

标签: mysql sql timestamp


【解决方案1】:

MySQL 自动使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 初始化 TIMESTAMP 列,因此您的第一列 TIME 默认添加了 CURRENT_TIMESTAMP。因此,当您将 DEFAULT 显式添加到列时,一列已经存在。您需要更改列的定义顺序:

CREATE  TABLE `silas`.`cs3_ds1` (
`ID` INT NOT NULL ,
`INSERT_TIME` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
`TIME` TIMESTAMP NOT NULL ,
`USER` VARCHAR(45) NOT NULL ,
`TIME1` TIMESTAMP NOT NULL ,
`TIME2` TIMESTAMP NOT NULL ,
 PRIMARY KEY (`ID`) )
 ENGINE = InnoDB

或将默认值添加到您的其他时间戳列:

CREATE  TABLE `silas`.`cs3_ds1` (
`ID` INT NOT NULL ,
`TIME` TIMESTAMP NOT NULL DEFAULT 0,
`USER` VARCHAR(45) NOT NULL  DEFAULT 0,
`TIME1` TIMESTAMP NOT NULL DEFAULT 0 ,
`TIME2` TIMESTAMP NOT NULL DEFAULT 0 ,
`INSERT_TIME` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
 PRIMARY KEY (`ID`) )
 ENGINE = InnoDB

有关详细信息,请参阅MySQL Docs

【讨论】:

    【解决方案2】:

    请检查您的 MYSQL 版本。您的 MYSQL 版本可能不是 5.6。由于 MYSQL 5.5 版的限制,会出现此问题。您需要将版本更新到 5.6。

    以下是我如何查询这个问题

    我在 MYSQL 中添加表时遇到此错误

    表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列我的新 MYSQL 表看起来像这样。

    create table table_name (col1 int(5) auto_increment 主键, col2 varchar(300), col3 varchar(500), col4 int(3), col5 tinyint(2), col6 timestamp default current_timestamp, col7 timestamp default current_timestamp on更新 current_timestamp,col8 tinyint(1) 默认 0,col9 tinyint(1) 默认 1); 经过一段时间阅读不同 MYSQL 版本的变化和一些谷歌搜索。我发现 MYSQL 5.6 版比 5.5 版做了一些更改。

    本文将帮助您解决问题。 http://www.oyewiki.com/MYSQL/Incorrect-table-definition-there-can-be-only-one-timestamp-column

    【讨论】:

      【解决方案3】:

      我最近也遇到了这个错误,但那是因为我运行的是

      以前,每个表最多可以自动初始化一个 TIMESTAMP 列,或者 更新为当前日期和时间。这个限制已经解除。任何时间戳 列定义可以是 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE 的任意组合
      CURRENT_TIMESTAMP 子句。此外,这些子句现在可以与 DATETIME 列定义一起使用。有关详细信息,请参阅 TIMESTAMP 和 DATETIME 的自动初始化和更新。

      有关详细信息,请参阅 MySQL 的文档。如果您点击此链接,请特别在“数据类型节点”部分:Changes in MySQL 5.6.5

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 2017-04-26
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多