Dans MariaDB, le SYSDATE()
et NOW()
Les fonctions sont similaires en ce sens qu'elles renvoient la date et l'heure actuelles.
Cependant, il existe une différence importante :SYSDATE()
renvoie l'heure à laquelle il s'exécute, alors que NOW()
renvoie l'heure à laquelle l'instruction a commencé à s'exécuter.
Et lorsqu'il est exécuté dans une procédure stockée ou un déclencheur, SYSDATE()
renverra l'heure à laquelle il s'exécute, alors que NOW()
renverra l'heure à laquelle la procédure stockée ou le déclencheur a commencé à s'exécuter.
Exemple
Voyons d'abord comment ces deux fonctions peuvent produire des résultats différents.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Résultat (en utilisant la sortie verticale) :
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
Ici, nous avons utilisé le SLEEP()
fonction pour suspendre le traitement pendant cinq secondes avant le deuxième lot d'appels de fonction.
Nous pouvons voir que la deuxième fois SYSDATE()
a été invoqué, sa valeur de retour était différente de la première fois. NOW()
d'autre part, a renvoyé la même valeur les deux fois.
Autres considérations
Il y a quelques autres choses à garder à l'esprit avec ces deux fonctions :
SET TIMESTAMP
n'affecte pasSYSDATE()
, alors qu'il fait affecter leNOW()
une fonction.SYSDATE()
n'est pas sûr pour la réplication si la journalisation binaire basée sur des instructions est utilisée. Cependant, il existe des moyens de gérer cela, si nécessaire. Vous pouvez utiliser--sysdate-is-now
command est une option non par défaut pour aliasSYSDATE()
àNOW()
pour le rendre sûr pour la réplication. Voir la documentation MariaDB pourSYSDATE()
pour plus d'informations.