代码之家  ›  专栏  ›  技术社区  ›  Erik

是否有理由在插入/更新中使用当前的时间戳?

  •  2
  • Erik  · 技术社区  · 15 年前

    我使用phpmyadmin将一些虚拟数据插入到表中,并注意到它像这样构造了插入:

    INSERT INTO `arc`.`transactions` (
        `txn_id` ,
        `date_time`  )
    VALUES (
        '50005',
        CURRENT_TIMESTAMP );
    

    通常,我不包括“日期时间”字段,该值由MySQL创建(因为该字段的类型为timestamp),并且在插入或更新记录时自动更新。

    是否有任何理由像上面看到的那样构造查询,显式插入当前的时间戳?或者这是一个phpmyadmin怪人?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Roland Bouman    15 年前

    这也可能是一个兼容性问题。 CURRENT_TIMESTAMP 由SQL标准定义。自动更新的时间戳列不是。一个希望可移植并记录时间戳的应用程序最好明确指定当前时间戳。还有什么比使用标准的、内置的 当前时间戳 功能?

        2
  •  3
  •   zombat    15 年前

    您可以具有不自动更新的时间戳字段(请参见 TIMESTAMP properties 关于如何指定这些字段的页),因此根据您如何定义列,更新查询可能不会自动调整时间戳字段。

    phpmyadmin可能在这里采用安全的方法,并指定值以确保它被更新,不管列定义如何。如果phpmyadmin愿意的话,它可能会检测到默认值,因此另一种可能的解释是它生成的任何SQL的各种服务器版本和模式之间的兼容性。

        3
  •  3
  •   alemjerus    15 年前

    这完全取决于 date_time 列定义。如果是这样的话

    `date_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    

    在插入或更新行时,您当然不需要指定任何内容,但如果是这样:

    `date_time` TIMESTAMP NOT NULL
    

    然后,每次创建或更新行时都必须指定一些内容