mysql - 如何添加“created_at”和“updated_at”列?
问题描述
我需要将“updated_at”和“created_at”列添加到 MySQL 数据库中一些已经存在的表中。我已经使用 MySQL Workbench 添加了这些列,但是我应该使用什么查询来使它们正常工作?提前致谢 ;)
解决方案
根据参考手册* 您可以在列定义中使用DEFAULT CURRENT_TIMESTAMP
and子句:ON UPDATE CURRENT_TIMESTAMP
使用DEFAULT CURRENT_TIMESTAMP和ON 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 列。
推荐阅读
- c - 如何使用 fgets() 重新分配多个数组
- javascript - 将 amCharts 用于 Web 应用程序时,是否有更好的方法来隐藏 JSON 数据?
- postgresql - 如何在 postgres 中使用 group by 中的多个过滤器?
- sql - 使用 xpath 从 SQL Server 获取数据
- swift - UITableView 不滚动问题
- python - Graphviz:显示节点属性
- java - JVM 版本冲突导致 Eclipse / Jetty 无法正常运行
- spring-boot - 访问我的 heroku spring-boot 休息站点给出错误代码=H10
- javascript - 为什么 responsivevoice.org 不能使用我的 Javascript?
- javascript - 在 Outlook 中为 Office.EventType.RecipientChanged 注册处理程序的正确方法是什么?