是否有理由在插入/更新中使用CURRENT_TIMESTAMP?

时间:2010-01-10 20:54:16

标签: mysql

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

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

通常情况下,我不会包含字段“date_time”,并且该值由mySQL创建(因为字段的类型为timestamp),并且无论何时插入或更新记录都会自动更新。

有没有理由按上面的说法构建查询,显式插入CURRENT_TIMESTAMP?或者这是一个phpmyadmin奇怪吗?

3 个答案:

答案 0 :(得分:3)

您可以拥有不自动更新的TIMESTAMP字段(请参阅TIMESTAMP properties页面了解如何指定这些字段),因此根据您定义列的方式,可能不是UPDATE查询的情况自动调整TIMESTAMP字段。

PHPMyAdmin可能采用安全方法并指定值以确保更新,无论列定义如何。如果需要,PHPMyAdmin可能会检测到默认值,因此另一种可能的解释是各种服务器版本与它生成的任何SQL的模式之间的兼容性。

答案 1 :(得分:3)

它完全取决于date_time列定义。如果它像

`date_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

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

`date_time` TIMESTAMP NOT NULL

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

答案 2 :(得分:3)

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