MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Différence entre SYSDATE() et NOW() dans MariaDB

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 pas SYSDATE() , alors qu'il fait affecter le NOW() 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 alias SYSDATE() à NOW() pour le rendre sûr pour la réplication. Voir la documentation MariaDB pour SYSDATE() pour plus d'informations.