При запуске UPDATE... datetime = NOW(); будут ли все обновленные строки иметь одну и ту же дату/время?
Когда вы запускаете что-то похожее на:
UPDATE table SET datetime = NOW();
на столе с 1 000 000 000 записями, и запрос занимает 10 секунд, чтобы все строки имели одинаковое время (минуты и секунды), или они будут иметь разное время? Другими словами, будет ли время запуска запроса или когда каждая строка будет обновлена?
Я запускаю MySQL, но я думаю, что это относится ко всем dbs.
Ответы
Ответ 1
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now
"СЕЙЧАС() возвращает постоянное время, указывающее время начала выполнения оператора. (В рамках хранимой процедуры или триггера NOW() возвращает время, в которое начинает выполняться инструкция или триггер.) Это отличается от поведения для SYSDATE(), который возвращает точное время, в которое он выполняется с MySQL 5.0.13."
Ответ 2
Если конечный результат важен для вас - ПРОВЕРЬТЕ ЕГО ПЕРВЫЙ, просто потому, что он должен работать как задокументированный, не означает, что это произойдет. Если есть сомнения, проверьте!
Ответ 3
Они должны иметь одно и то же время, обновление должно быть атомарным, что означает, что независимо от того, сколько времени требуется для выполнения, действие должно происходить так, как если бы все было сделано одновременно.
Если вы столкнулись с другим поведением, время изменения для другой СУБД.
Ответ 4
Назначьте NOW()
переменной, затем обновите дату-время с помощью переменной:
update_date_time=now()
теперь обновляется следующим образом
UPDATE table SET datetime =update_date_time;
исправить синтаксис, согласно вашему требованию
Ответ 5
Ответ на sqlite
update TABLE set mydatetime = datetime('now');
в случае, если кто-то ищет его.