In MariaDB das SYSDATE()
und NOW()
Funktionen sind insofern ähnlich, als sie das aktuelle Datum und die aktuelle Uhrzeit zurückgeben.
Es gibt jedoch einen wichtigen Unterschied:SYSDATE()
gibt die Zeit zurück, zu der es ausgeführt wird, wohingegen NOW()
gibt die Zeit zurück, zu der die Ausführung der Anweisung begonnen hat.
Und wenn es innerhalb einer gespeicherten Prozedur oder eines Triggers ausgeführt wird, SYSDATE()
gibt die Zeit zurück, zu der es ausgeführt wird, wohingegen NOW()
gibt die Zeit zurück, zu der die gespeicherte Prozedur oder der Trigger mit der Ausführung begonnen hat.
Beispiel
Schauen wir uns zunächst an, wie diese beiden Funktionen zu unterschiedlichen Ergebnissen führen können.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Ergebnis (bei vertikaler Ausgabe):
NOW(): 2021-05-27 09:22:08 SYSDATE(): 2021-05-27 09:22:08 SLEEP(5): 0 NOW(): 2021-05-27 09:22:08 SYSDATE(): 2021-05-27 09:22:13
Hier haben wir den SLEEP()
verwendet Funktion, die Verarbeitung fünf Sekunden lang anzuhalten, bevor die zweite Menge von Funktionsaufrufen ausgeführt wird.
Das sehen wir beim zweiten Mal SYSDATE()
aufgerufen wurde, war der Rückgabewert anders als beim ersten Mal. NOW()
andererseits beide Male denselben Wert zurückgegeben.
Andere Überlegungen
Bei diesen beiden Funktionen sind noch einige andere Dinge zu beachten:
SET TIMESTAMP
wirkt sich nicht aufSYSDATE()
aus , wohingegen es es tutNOW()
beeinflussen Funktion.SYSDATE()
ist für die Replikation unsicher, wenn die anweisungsbasierte binäre Protokollierung verwendet wird. Es gibt jedoch Möglichkeiten, damit umzugehen, falls erforderlich. Sie können--sysdate-is-now
verwenden command ist eine nicht standardmäßige Option für den Alias SYSDATE()
zuNOW()
um es sicher für die Replikation zu machen. Siehe die MariaDB-Dokumentation fürSYSDATE()
für weitere Informationen.