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 TIMESTAMPnon 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-nowcommand è un'opzione non predefinita per l'aliasSYSDATE()aNOW()per renderlo sicuro per la replica. Consulta la documentazione di MariaDB perSYSDATE()per ulteriori informazioni.