在“DEFAULT或ON UPDATE子句中只有一个带CURRENT_TIMESTAMP的TIMESTAMP列”错误,而它只使用一次

时间:2012-06-14 11:17:41

标签: mysql sql timestamp

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

为什么我收到此错误?

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:1)

请检查您的MYSQL版本。您的MYSQL版本可能是5.6的其他版本。由于MYSQL版本5.5的限制,此问题正在发生。您需要将版本更新为5.6。

以下是我查询此问题的方法

我在MYSQL中添加一个表时遇到了这个错误

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

create table table_name(col1 int(5)auto_increment primary key,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

答案 2 :(得分:0)

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

  

以前,每个表最多只能有一个TIMESTAMP列自动初始化或   更新到当前日期和时间。这一限制已被取消。任何TIMESTAMP   列定义可以包含DEFAULT CURRENT_TIMESTAMP和ON UPDATE
的任意组合   CURRENT_TIMESTAMP子句。此外,这些子句现在可以与DATETIME列定义一起使用。有关更多信息,请参阅TIMESTAMP和DATETIME的自动初始化和更新。

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