SQL NOW () в длительном запросе - PullRequest
3 голосов
/ 02 апреля 2011

Скажем, у меня есть длительный запрос на обновление

update some_table 
set modification_time = now() 
where (something incredibly complex);

Какими будут значения модификации_времен в некоторой_таблице?Будут ли они одинаковыми или разными (скажем, на выполнение запроса ушло 2 дня).

И если они будут разными, как мне написать этот запрос, чтобы они все были одинаковыми?

1 Ответ

8 голосов
/ 02 апреля 2011

Они все будут одинаковыми, так как NOW () заблокирован во время запуска запроса.

Это слишком короткий ответ?

Хорошо, больше информации Ссылка на MySQL для NOW ()

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 |
+---------------------+----------+---------------------+

Что интересного вы спрашиваете ... обратите внимание, что вы можете SLEEP в запросе ?? Рассмотреть этот запрос (подзапрос просто эмулирует таблицу из 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
...