При запуске UPDATE… datetime = NOW();будут ли все обновленные строки иметь одинаковую дату/время?

StackOverflow https://stackoverflow.com/questions/195173

Вопрос

Когда вы запускаете что-то похожее на:

UPDATE table SET datetime = NOW();

в таблице с 1 000 000 000 записей и выполнение запроса занимает 10 секунд, все строки будут иметь одинаковое время (минуты и секунды) или они будут иметь разное время?Другими словами, будет ли это время запуска запроса или обновления каждой строки?

Я использую MySQL, но думаю, это относится ко всем базам данных.

Это было полезно?

Решение

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now

«NOW() возвращает постоянное время, указывающее время начала выполнения оператора.(Внутри хранимой процедуры или триггера функция NOW() возвращает время начала выполнения процедуры или оператора триггера.) Это отличается от поведения функции SYSDATE(), которая возвращает точное время выполнения, начиная с MySQL 5.0. 13."

Другие советы

Если для вас важен конечный результат - СНАЧАЛА ПРОВЕРЬТЕ ЕГО, то, что он «должен» работать так, как описано в документации, не означает, что так и будет.Если сомневаетесь, протестируйте!

Назначать NOW() в переменную, затем обновите дату и время с помощью переменной:

update_date_time=now()

теперь обнови вот так

UPDATE table SET datetime =update_date_time;

исправьте синтаксис согласно вашему требованию

У них должно быть одинаковое время, обновление должно быть атомарным, а это означает, что независимо от того, сколько времени потребуется для выполнения, действие должно происходить так, как если бы все было выполнено одновременно.

Если вы столкнулись с другим поведением, пришло время перейти на другую СУБД.

Ответ sqlite:

update TABLE set mydatetime = datetime('now');

на случай, если кто-то другой его искал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top