MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Unterschied zwischen SYSDATE() und NOW() in MariaDB

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 auf SYSDATE() aus , wohingegen es es tut NOW() 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() zu NOW() um es sicher für die Replikation zu machen. Siehe die MariaDB-Dokumentation für SYSDATE() für weitere Informationen.