我使用phpmyadmin将一些虚拟数据插入到表中,并注意到它构造了这样的插入:
INSERT INTO `arc`.`transactions` (
`txn_id` ,
`date_time` )
VALUES (
'50005',
CURRENT_TIMESTAMP );
通常情况下,我不会包含字段“date_time”,并且该值由mySQL创建(因为字段的类型为timestamp),并且无论何时插入或更新记录都会自动更新。
有没有理由按上面的说法构建查询,显式插入CURRENT_TIMESTAMP?或者这是一个phpmyadmin奇怪吗?
答案 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
函数更好的方法?