MySQL 错误 "There can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT clause"即使我没有做错

标签 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 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列”。

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

最佳答案

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

With neither DEFAULT CURRENT_TIMESTAMP nor ON UPDATE CURRENT_TIMESTAMP, it is the same as specifying both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP.

CREATE TABLE t1 (
  ts TIMESTAMP
);

但是,

With a constant, the default is the given value. In this case, the column has no automatic properties at all.

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

关于MySQL 错误 "There can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT clause"即使我没有做错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23054394/

相关文章:

php - 将时间转换为 MySQL 时间

MySql 搜索排名标准

c# - 在 C# 中将 SQL 查询(带有相关子查询)转换为 LINQ

sql - SQL-在INSERT VALUES中选择

mysql - 两张表的复杂 MySQL 查询

mysql - sqoop导出mysql分区

mysql - SQL音乐播放列表数据库查询设计

javascript - Mysql查询时间问题?

sql - 字符串或二进制数据将被截断。该语句已终止。 (长度相同)

java - Android 从数据库获取数据到编辑 TextView 时遇到问题