3

我正在使用以下 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

为什么我会收到此错误?

4

3 回答 3

10

MySQL 使用 自动初始化 TIMESTAMP 列DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_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 文档

于 2012-06-14T11:40:48.913 回答
3

请检查您的 MYSQL 版本。您的 MYSQL 版本可能不是 5.6。由于 MYSQL 版本 5.5 中的限制而发生此问题。您需要将版本更新到 5.6。

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

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

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

创建表 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 update 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

于 2016-10-14T02:25:17.563 回答
0

我最近也遇到了这个错误,但那是因为我运行的是 < PHP 5.6.5。根据 PHP 5.6.5 的文档,此限制已被取消:

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

有关更多信息,请参阅 MySQL 的文档。如果您点击此链接,特别是在“数据类型节点”部分下:MySQL 5.6.5 中的更改

于 2014-05-29T20:06:45.913 回答