53

在 MySQL 中,我厌倦了将列dt_createddt_modified(分别是创建和最后修改的日期时间戳)添加到我数据库中的所有表中。

每次我INSERTUPDATE数据库时,我都将不得不使用NOW()关键字。这就是我的坚持。

是否有任何有效的替代方法可以让 MySQL 至少自动存储插入行的数据时间并让我检索它?

4

7 回答 7

98

您可以使用 DEFAULT 约束来设置时间戳:

ALTER TABLE
 MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP

ALTER TABLE
 MODIFY dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

然后你就不必NOW()在你的 INSERT/UPDATE 语句中指定了。

参考:TIMESTAMP 属性

于 2009-12-19T05:58:17.667 回答
13

如果您使用的是phpmyadmin,您可以通过以下方式执行此操作:

在此处输入图像描述

于 2014-04-04T13:31:06.870 回答
10
ALTER TABLE  `tablename` CHANGE  `dt`  `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

应该是正确的代码。

于 2010-02-20T10:13:39.737 回答
3

好吧,你不能同时拥有:

mysql文档:

不可能将当前时间戳设为一列的默认值,而将另一列的自动更新值设为默认值。

伤心,不是吗?

但是,您可以按照此提示使用 null 而不是 now()

于 2013-03-29T13:04:53.847 回答
1

此处提出了类似的问题“ MySQL的时间戳”,时间戳字段将在每次访问时更新。您还可以考虑在相关表上放置一个触发器来自动为您填充这些字段。根据环境,一些商店/企业不喜欢使用触发器,因此您可能需要寻找替代解决方法。

于 2009-12-19T05:58:19.887 回答
0

在 phpmyadmin 你可以设置 在此处输入图像描述

或使用此查询

ALTER TABLE  `tablename`
    CHANGE  `dt_created`  `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
于 2017-04-28T13:21:58.967 回答
0

可以在更新行时设置为默认值

ALTER TABLE `tablename` CHANGE `dt` `dt` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
于 2019-11-08T01:49:20.233 回答