我有下面的表格模式;

CREATE TABLE `db1`.`sms_queue` (
  `Id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `Message` VARCHAR(160) NOT NULL DEFAULT 'Unknown Message Error',
  `CurrentState` VARCHAR(10) NOT NULL DEFAULT 'None',
  `Phone` VARCHAR(14) DEFAULT NULL,
  `Created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `LastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `TriesLeft` tinyint NOT NULL DEFAULT 3,
  PRIMARY KEY (`Id`)
)
ENGINE = InnoDB;

它失败,出现以下错误:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

我的问题是,我能同时拥有这两个字段吗?或者我必须在每次交易中手动设置LastUpdated字段吗?

推荐答案

From the MySQL 5.5 documentation:

表中的一个时间戳列可以将当前时间戳作为初始化该列的默认值,也可以将其作为自动更新值,或者两者兼而有之.It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.

Changes in MySQL 5.6.5:

以前,每个表最多可以自动初始化一个时间戳列,或将其更新为当前日期和时间.This restriction has been lifted.任何时间戳列定义都可以有默认的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句的任意组合.此外,这些子句现在可以与DATETIME列定义一起使用.有关更多信息,请参阅时间戳和日期时间的自动初始化和更新.

Mysql相关问答推荐

如果WHERE语句包含所有列,唯一键顺序是否重要?

返回包含某一列的分组最大值的行,说明列中的重复值

提高bash脚本从大型gml文件读取数据的效率

DJANGO 使用原始 MYSQL 查询计算记录数并在 html 模板中使用结果

docker-compose:无法将应用程序服务连接到 mysql 数据库,收到错误:用户‘root’@‘localhost’访问被拒绝(使用密码:YES)

查找表中的唯一记录

使用 awk 重写 maxscale 过滤器

如何确保 SQL 记录的列不引用它自己的主键?

判断一列中的多个值并返回值 1 或 0

MYSQL如何将虚拟列添加到现有表中

如何查看 rdsadmin 在 mysql 实例上的权限?

在 PHP 中获取 MySQL 列的总和

如何删除没有临时表的 MySQL 表中的所有重复记录

#1146 - 表 'phpmyadmin.pma_recent' 不存在

将sql查询的结果写入mysql中的文件

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

使用 MySql,我可以对列进行排序但最后有 0 吗?

在 MySQL 中的子查询上使用 GROUP_CONCAT

如何将数组存储到mysql中?

如果另一列为空,则 Select 一列