I MariaDB er SYSDATE()
og NOW()
funktioner ligner hinanden ved, at de returnerer den aktuelle dato og klokkeslæt.
Der er dog en vigtig forskel:SYSDATE()
returnerer den tid, den udfører, mens NOW()
returnerer det tidspunkt, hvor sætningen begyndte at udføre.
Og når den køres inden for en lagret procedure eller trigger, SYSDATE()
returnerer den tid, den udfører, mens NOW()
returnerer det tidspunkt, hvor den lagrede procedure eller trigger begyndte at udføre.
Eksempel
Lad os først se på, hvordan disse to funktioner kan give forskellige resultater.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultat (ved hjælp af lodret output):
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
Her brugte vi SLEEP()
funktion for at sætte behandlingen på pause i fem sekunder før den anden masse funktionskald.
Det kan vi se anden gang SYSDATE()
blev påberåbt, var dens returværdi anderledes end første gang. NOW()
på den anden side returnerede den samme værdi begge gange.
Andre overvejelser
Der er et par andre ting, du skal være opmærksom på med disse to funktioner:
SET TIMESTAMP
påvirker ikkeSYSDATE()
, hvorimod den gør påvirkeNOW()
fungere.SYSDATE()
er usikker til replikering, hvis der bruges sætningsbaseret binær logning. Der er dog måder at håndtere dette på, hvis det er nødvendigt. Du kan bruge--sysdate-is-now
kommandoen er en ikke-standardindstilling til aliasSYSDATE()
tilNOW()
for at gøre det sikkert til replikering. Se MariaDB-dokumentationen forSYSDATE()
for mere information.