首页 > 解决方案 > 如何添加“created_at”和“updated_at”列?

问题描述

我需要将“updated_at”和“created_at”列添加到 MySQL 数据库中一些已经存在的表中。我已经使用 MySQL Workbench 添加了这些列,但是我应该使用什么查询来使它们正常工作?提前致谢 ;)

标签: mysqlsqldatabase

解决方案


根据参考手册* 您可以在列定义中使用DEFAULT CURRENT_TIMESTAMPand子句:ON UPDATE CURRENT_TIMESTAMP

使用DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 时,该列将当前时间戳作为其默认值,并自动更新为当前时间戳。

然而:

使用 DEFAULT 子句但没有ON UPDATE CURRENT_TIMESTAMP 子句时,该列具有给定的默认值,并且不会自动更新为当前时间戳。

因此,例如,您可以使用:

CREATE TABLE t1 (
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

要将列添加到已经存在的表中,您可以使用:

ALTER TABLE t1
ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

注意:提供的链接是指 MySQL 8.0。以前版本的语法也相同。但对于 5.6.5 之前的版本,存在一些差异。再次引用手册

从 MySQL 5.6.5 开始,TIMESTAMP 和 DATETIME 列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在 5.6.5 之前,这仅适用于 TIMESTAMP,并且每个表最多有一个 TIMESTAMP 列。


推荐阅读