Lors de l'exécution de UPDATE… datetime = NOW (); Est-ce que toutes les lignes mises à jour auront la même date / heure?

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

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top