我正在使用以下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
为什么我收到此错误?
答案 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