说我长时间运行更新查询
update some_table set modification_time = now() where (something incredibly complex);
some_table中的modification_time的值是什么?它们是相同还是不同(例如,执行查询花了2天的时间)。
如果它们不同,如何编写此查询以使它们都相同?
它们都是一样的,因为NOW()在查询开始时被锁定了。
答案太短了吗?
好的,更多信息有关NOW()的MySQL参考
NOW()返回一个 恒定时间 ,该时间指示该语句 开始执行的时间 。(在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)这与SYSDATE()的行为不同,后者返回确切的执行时间。
实际上,阅读SYSDATE()的手动条目实际上更有趣,它包含此代码段
mysql> SELECT NOW(), SLEEP(2), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+
您问什么有意思。.请 注意,您可以 在查询中进入 睡眠状态 ?? 考虑一下此查询(子查询仅模拟一个3记录表)
select *, now(), sleep(2), sysdate() from (select 1 N union all select 2 union all select 3) M
你得到:
N now() sleep(2) sysdate() 1 2011-04-02 23:55:27 0 2011-04-02 23:55:29 2 2011-04-02 23:55:27 0 2011-04-02 23:55:31 3 2011-04-02 23:55:27 0 2011-04-02 23:55:33