MariaDB
 sql >> Database >  >> RDS >> MariaDB

Differenza tra SYSDATE() e NOW() in MariaDB

In MariaDB, il SYSDATE() e NOW() le funzioni sono simili in quanto restituiscono la data e l'ora correnti.

Tuttavia, c'è una differenza importante:SYSDATE() restituisce l'ora di esecuzione, mentre NOW() restituisce l'ora in cui l'istruzione ha iniziato l'esecuzione.

E quando viene eseguito all'interno di una stored procedure o trigger, SYSDATE() restituirà il tempo di esecuzione, mentre NOW() restituirà l'ora in cui la procedura memorizzata o il trigger ha iniziato l'esecuzione.

Esempio

Innanzitutto, diamo un'occhiata a come queste due funzioni possono produrre risultati diversi.

SELECT 
    NOW(),
    SYSDATE(),
    SLEEP(5),
    NOW(),
    SYSDATE();

Risultato (usando l'output 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

Qui, abbiamo usato il SLEEP() funzione per sospendere l'elaborazione per cinque secondi prima del secondo lotto di chiamate di funzione.

Possiamo vederlo la seconda volta SYSDATE() è stato richiamato, il suo valore restituito era diverso dalla prima volta. NOW() d'altra parte, ha restituito lo stesso valore entrambe le volte.

Altre considerazioni

Ci sono alcune altre cose a cui prestare attenzione con queste due funzioni:

  • SET TIMESTAMP non ha effetto su SYSDATE() , mentre fa influisca su NOW() funzione.
  • SYSDATE() non è sicuro per la replica se viene utilizzata la registrazione binaria basata su istruzioni. Tuttavia, ci sono modi per affrontarlo, se necessario. Puoi usare --sysdate-is-now command è un'opzione non predefinita per l'alias SYSDATE() a NOW() per renderlo sicuro per la replica. Consulta la documentazione di MariaDB per SYSDATE() per ulteriori informazioni.