MySQL错误" DEFAULT子句中只有一个TIMESTAMP列和CURRENT_TIMESTAMP"即使我没有做错任何事

时间:2014-04-14 07:31:25

标签: mysql sql database

CREATE TABLE AlarmHistory
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    value DOUBLE NOT NULL,
    startedStamp TIMESTAMP NOT NULL,
    finishedStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
);

尝试创建上面的表时,我收到以下错误:" SQL错误(1293):表定义不正确;在DEFAULT或ON UPDATE子句"中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP。

我的问题是这是一个错误吗?因为可以肯定,我有两个TIMESTAMP列,但只有一个列具有默认定义。当我删除startedStamp时,我没有错误。

2 个答案:

答案 0 :(得分:11)

根据MySQL手册5.5版,Automatic Initialization and Updating for TIMESTAMP

  

既不是DEFAULT CURRENT_TIMESTAMP也不是ON UPDATE CURRENT_TIMESTAMP,它与指定DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP相同。

CREATE TABLE t1 (
  ts TIMESTAMP
);

然而,

  

使用常量,默认值是给定值。在这种情况下,该列根本没有自动属性。

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT 0
);

所以,这应该有效:

CREATE TABLE AlarmHistory
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    value DOUBLE NOT NULL,
    startedStamp TIMESTAMP DEFAULT 0 NOT NULL,
    finishedStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);

fiddle

答案 1 :(得分:2)

这是MYSQL 5.5版本的限制。您需要将版本更新为5.6。

我在MYSQL中添加表

时遇到此错误
  

表定义不正确;只能有一个TIMESTAMP列   在DEFAULT或ON UPDATE子句中使用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默认current_timestamp,col7时间戳默认值   更新current_timestamp上的current_timestamp,col8 tinyint(1)   默认0,col9 tinyint(1)默认1);

经过一段时间阅读不同MYSQL版本和一些谷歌搜索的变化。我发现在MYSQL 5.6版本中有一些更改。

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