Lors de l'exécution de UPDATE… datetime = NOW (); Est-ce que toutes les lignes mises à jour auront la même date / heure?
-
10-07-2019 - |
Question
Lorsque vous exécutez un processus similaire à:
UPDATE table SET datetime = NOW();
sur une table avec 1 000 000 000 enregistrements et la requête prend 10 secondes, toutes les lignes auront-elles exactement le même temps (minutes et secondes) ou auront-elles des temps différents? En d’autres termes, l’heure sera-t-elle celle du début de la requête ou de la mise à jour de chaque ligne?
J'utilise MySQL, mais je pense que cela s'applique à tous les dbs.
La solution
http: // dev. mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now
"NOW () renvoie une heure constante qui indique l'heure à laquelle l'instruction a commencé à s'exécuter. (Dans une routine ou un déclencheur stocké, NOW () renvoie l'heure à laquelle la routine ou l'instruction a commencé à s'exécuter.) Cela diffère du comportement de SYSDATE (), qui renvoie l'heure exacte à laquelle elle est exécutée à partir de MySQL 5.0. 13 "
Autres conseils
Si le résultat final est important pour vous - TESTEZ-LE EN PREMIER, ce n'est pas parce qu'il "devrait" fonctionner de la manière documentée que cela fonctionnera. En cas de doute, testez!
Assignez NOW ()
à une variable, puis mettez à jour le datetime avec la variable:
update_date_time=now()
met maintenant à jour comme ceci
UPDATE table SET datetime =update_date_time;
corrigez la syntaxe, selon vos besoins
Ils devraient avoir le même temps, la mise à jour est supposée être atomique, ce qui signifie que quel que soit le temps nécessaire à l'exécution, l'action est supposée se dérouler comme si tout avait été fait en même temps.
Si vous rencontrez un comportement différent, il est temps de passer à un autre SGBD.
La réponse sqlite est
update TABLE set mydatetime = datetime('now');
si quelqu'un d'autre le cherchait.