web-dev-qa-db-fra.com

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

Lorsque vous exécutez quelque chose de similaire à:

UPDATE table SET datetime = NOW();

sur une table avec 1 000 000 000 d'enregistrements et l'exécution de la requête prend 10 secondes, toutes les lignes auront-elles exactement la même heure (minutes et secondes) ou auront-elles des heures différentes? En d'autres termes, le moment sera-t-il lorsque la requête a commencé ou lorsque chaque ligne est mise à jour?

J'utilise MySQL, mais je pense que cela s'applique à tous les dbs.

42
Darryl Hein

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

"NOW () renvoie un temps constant 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 de déclenchement a commencé à s'exécuter.) Ceci diffère de la comportement de SYSDATE (), qui renvoie l'heure exacte à laquelle il s'exécute à partir de MySQL 5.0.13. "

44
micahwittman

Si le résultat final est important pour vous - TESTEZ-LE D'ABORD, ce n'est pas parce qu'il "devrait" fonctionner comme indiqué. En cas de doute, testez!

5
andora

Assignez NOW() à une variable puis mettez à jour le datetime avec la variable:

update_date_time=now()

maintenant mettre à jour comme ça

UPDATE table SET datetime =update_date_time;

corriger la syntaxe, selon vos besoins

5
MRRaja

Ils devraient avoir le même temps, la mise à jour est censée être atomique, ce qui signifie que quel que soit le temps qu'il faut pour effectuer, l'action est censée se produire comme si tout avait été fait en même temps.

Si vous rencontrez un comportement différent, il est temps de changer pour un autre SGBD.

1
gizmo

La réponse sqlite est

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

au cas où quelqu'un d'autre le chercherait.

0
My Name Goes Here