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 suSYSDATE()
, mentre fa influisca suNOW()
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'aliasSYSDATE()
aNOW()
per renderlo sicuro per la replica. Consulta la documentazione di MariaDB perSYSDATE()
per ulteriori informazioni.