【问题标题】:MySQL auto-store datetime for each rowMySQL为每一行自动存储日期时间
【发布时间】:2010-12-28 06:34:42
【问题描述】:

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

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

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

【问题讨论】:

  • 我糟糕的语法潜伏在 Stack Overflow 的黑暗深处。谢谢@Eric Leschinski。

标签: sql mysql datetime audit


【解决方案1】:

您可以使用 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

【讨论】:

  • 啊我不知道你可以使用类似ON UPDATE CURRENT_TIMESTAMP
  • 附加信息: 表中的一个 TIMESTAMP 列可以将当前时间戳作为初始化该列的默认值、作为自动更新值,或两者兼而有之。不可能将当前时间戳设为一列的默认值,而将另一列的自动更新值设为默认值。 dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
  • DEFAULT ON UPDATE CURRENT_TIMESTAMP 不是有效的 SQL。它必须是 dt_modified datetime ON UPDATE CURRENT_TIMESTAMPdt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 如果您仍然声称它是有效的,那么可能是 MySQL Workbench 存在问题,应该提及。
【解决方案2】:

如果您使用的是 phpmyadmin,您可以这样做:

【讨论】:

    【解决方案3】:
    ALTER TABLE  `tablename` CHANGE  `dt`  `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    

    应该是正确的代码。

    【讨论】:

      【解决方案4】:

      好吧,你不能两者兼得:

      mysql doc:

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

      伤心,不是吗?

      你可以使用 null 而不是 now() following this tip

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          在 phpmyadmin 你可以设置

          或 使用这个查询

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-08-10
              • 1970-01-01
              • 2010-11-23
              • 2015-02-26
              • 1970-01-01
              • 2012-12-27
              • 2019-12-04
              • 2013-08-20
              相关资源
              最近更新 更多