2008-10-12 14 views
35

Wenn Sie etwas laufen ähnlich wie:Wenn UPDATE ausgeführt wird ... datetime = NOW(); Haben alle Zeilen das gleiche Datum/Uhrzeit?

UPDATE table SET datetime = NOW(); 

auf einem Tisch mit 1 000 000 000 Datensätze und die Abfrage dauert 10 Sekunden zu laufen, werden alle Zeilen haben die exakt gleiche Zeit (Minuten und Sekunden) oder wird sie haben unterschiedliche Zeiten? Mit anderen Worten, ist die Zeit, wenn die Abfrage gestartet oder wenn jede Zeile aktualisiert wird?

Ich benutze MySQL, aber ich denke, das gilt für alle dbs.

Antwort

37

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

„NOW() gibt eine konstante Zeit, die die Zeit angibt, die Anweisung auszuführen begann. (Innerhalb einer gespeicherten Routine oder Trigger, NOW() gibt den Zeitpunkt, zu dem die Routine oder triggernde Anweisung begann zu laufen.) Dies unterscheidet sich von dem Verhalten für SYSDATE(), das den genauen Zeitpunkt zurückgibt, zu dem es ab MySQL 5.0.13 ausgeführt wird. "

+2

SQL ist SET-orientiert, was bedeutet, dass Aktualisierungen für den gesamten Satz oder überhaupt nicht gelten. Der Unterschied zwischen NOW() und SYSDATE() ist hier nicht signifikant. In beiden Fällen wird das Feld 'datetime' mit einem einzelnen/distinct Wert aktualisiert. –

1

Sie sollten die gleiche Zeit haben, das Update soll atomar sein, was bedeutet, dass unabhängig davon, wie lange es dauert, die Aktion so ablaufen soll, als wäre alles zur gleichen Zeit erledigt.

Wenn Sie ein anderes Verhalten feststellen, ist es Zeit für ein anderes DBMS zu ändern.

+0

Nicht alles erlebt, nur Bestätigung, bevor ich weitermachen und davon ausgehen, dass es sein wird. –

3

Wenn das Endergebnis für Sie wichtig ist - TESTE ES ZUERST, nur weil es wie dokumentiert funktionieren soll, heißt das nicht. Im Zweifelsfall test!

+13

Ja, Tests sind wichtig (+1), sollten aber nicht die einzige Grundlage für die Entscheidung sein. Wenn das getestete Verhalten tatsächlich nicht dokumentiert wurde, kann es sich jederzeit ändern. Wir sollten uns nur auf das dokumentierte Verhalten verlassen, es jedoch testen, um sicherzustellen, dass es wie dokumentiert funktioniert. –

0

Die SQLite-Antwort ist

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

, falls jemand anders für sie suchen.

+0

funktionieren nicht in 'mysql' – Belter

1

zuordnen NOW() auf eine Variable dann die Datetime mit Variable aktualisieren:

update_date_time=now() 

wie dieses Update jetzt

UPDATE table SET datetime =update_date_time; 

korrigieren Sie die Syntax, wie pro Ihre Anforderung