【问题标题】:One Mysql Table with Multiple TIMESTAMP Columns一个具有多个 TIMESTAMP 列的 Mysql 表
【发布时间】:2011-01-31 13:58:02
【问题描述】:

我想要一张有两个TIMESTAMP 列的表。一列用于跟踪记录的创建时间,另一列用于跟踪记录的修改时间。我希望这些值由数据库处理。我不想让我的应用层考虑它。

我知道,如果您有一个带有 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMPTIMESTAMP 列,则您不能拥有另一个 TIMESTAMP 列。您可以使用DATETIME,但据我所知,在触发器之外无法默认它。

我发现你 can have multiple TIMESTAMP columns 不带 DEFAULTON UPDATE 并在创建记录时插入 NULL,导致每个都有当前时间戳。从那时起,第一列将自动更新。

这非常有效,但它给我留下了一种有趣的感觉。像这可能是一个错误,它可以随时修补。如果这是它应该工作的方式,那就这样吧。我会高高兴兴地走上我的路。谁能告诉我这是最好的方法还是我应该使用触发器?

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    它记录在 MySQL 文档中:

    此外,您可以将任何 TIMESTAMP 列初始化或更新为 当前日期和时间通过为其分配一个 NULL 值,除非它已经 使用 NULL 属性定义以允许 NULL 值。

    http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

    【讨论】:

    • 在 MySQL 5.6.5 中,多个时间戳可以在一个表中独立控制,因此规则已经改变。
    【解决方案2】:

    MySQL 允许在同一张表中有多个 TIMESTAMP 列,查看这个例子:

    CREATE TABLE t1 (
      ts1 TIMESTAMP DEFAULT 0,
      ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                    ON UPDATE CURRENT_TIMESTAMP);
    CREATE TABLE t2 (
      ts1 TIMESTAMP NULL,
      ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                    ON UPDATE CURRENT_TIMESTAMP);
    CREATE TABLE t3 (
      ts1 TIMESTAMP NULL DEFAULT 0,
      ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                    ON UPDATE CURRENT_TIMESTAMP);
    

    请注意,ts1 TIMESTAMP 列的 DEFAULT 值为 0,而 ts2 TIMESTAMP 列的 DEFAULT 值为 CURRENT_TIMESTAMP。更多信息在这里http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

    【讨论】:

      【解决方案3】:

      5.6.1 之前的 MySQL 版本不允许在同一个表中使用两个 TIMESTAMP 列,除非您正确地指出没有默认值并允许为空。

      MySQL 5.6.+ 允许一个表中有两个或更多 TIMESTAMP 列。

      更多:http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-03-04
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 2018-12-06
        相关资源
        最近更新 更多