2010-01-10 90 views
2

我使用phpMyAdmin插入一些虚拟数据到一个表,并注意到它的结构是这样的插入:是否有理由在插入/更新中使用CURRENT_TIMESTAMP?

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

通常情况下,我只是不包括场“DATE_TIME”,并通过创造的价值mySQL(因为该字段是时间戳类型的),并且在您插入或更新记录时自动更新。

是否有任何理由构建查询,如上所见,显式插入CURRENT_TIMESTAMP?或者这是一个phpmyadmin的怪胎?

回答

3

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

+0

这实际上很有意义。谢谢。 – Erik 2010-01-10 21:14:32

3

您可以使TIMESTAMP字段不会自动更新(请参阅TIMESTAMP properties页面以了解如何指定这些内容),因此,根据您如何定义列,UPDATE查询可能不会自动调整TIMESTAMP字段。

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

3

它完全取决于date_time列定义。如果是喜欢

`date_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

那么你肯定不需要插入或更新行时指定任何东西,但如果它是:

`date_time` TIMESTAMP NOT NULL 

然后,你必须在每次创建时指定的东西或更新一行

相关问题