【发布时间】:2011-11-08 09:41:49
【问题描述】:
如果我这样做了
INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())
两列中的两个字段是否始终相同?
同上
INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())
,(NOW(),NOW())
所有四个数据库条目是否都具有相同的值,或者 row1 row2 是否可能?
请注意,这是一个理论问题,而不是 work-around 问题。
我真的很想知道如何以及为什么。
【问题讨论】:
-
这是什么 RDBMS?它不是通用的。 SQL Server 没有
NOW()。但是,如果您对getdate()的 SQL Server 答案感兴趣,那就是No, they will not always be the same -
@Martin,非常感谢您的评论,但是我的问题与那个问题略有不同。大多数 SQL 服务器会预先计算在 select/update/insert 语句中使用的函数的结果,以加快查询速度。
-
是 SQL Server 预先计算函数引用的每个实例。因此,如果您执行
SELECT GETDATE(), GETDATE() FROM Table,则无论行数如何,都会调用GETDATE()函数两次。然而,调用一次并在两列中使用相同的结果似乎没有逻辑。 -
@Martin 谢谢,信息量很大,我想知道因为你可以像这样使用 now() 函数作为盐值:
INSERT INTO table1 (who, when, key) VALUES ('user1', now(), SOMESORTOFHASH(CONCAT(NOW(),'secret')))如果不匹配,那真的很糟糕! -
DB2(至少在 iSeries 上)明确将此称为它确实 所做的事情。在 DB2 下,所有值都将共享相同的时钟读数。
标签: sql database-agnostic