MySQL自动存储每行的日期时间

时间:2009-12-19 05:47:27

标签: sql mysql datetime audit

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

每次INSERTUPDATE数据库,我都必须使用NOW()关键字。这完全是我的坚持。

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

7 个答案:

答案 0 :(得分:78)

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

ALTER TABLE
 MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP

ALTER TABLE
 MODIFY dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

然后您不必在INSERT / UPDATE语句中指定NOW()

参考:TIMESTAMP properties

答案 1 :(得分:10)

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

enter image description here

答案 2 :(得分:9)

ALTER TABLE  `tablename` CHANGE  `dt`  `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

应该是正确的代码。

答案 3 :(得分:3)

嗯,你不能同时拥有两个:

mysql doc:

  

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

伤心,不是吗?

然而,您可以使用null而不是now()following this tip

答案 4 :(得分:1)

此处询问类似问题“Timestamp for MySQL”时间戳字段将在每次访问时更新。您可能还会考虑在问题表上放置Trigger以自动为您填充这些字段。根据环境,一些商店/企业不喜欢使用触发器,因此您可能需要找到替代工作。

答案 5 :(得分:0)

在phpmyadmin中你可以设置 enter image description here

OR 使用此查询

ALTER TABLE  `tablename`
    CHANGE  `dt_created`  `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

答案 6 :(得分:0)

可以默认设置为行更新

ALTER TABLE `tablename` CHANGE `dt` `dt` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;