In MariaDB, de SYSDATE()
en NOW()
functies zijn vergelijkbaar in die zin dat ze de huidige datum en tijd retourneren.
Er is echter een belangrijk verschil:SYSDATE()
geeft de tijd terug dat het wordt uitgevoerd, terwijl NOW()
geeft de tijd terug waarop de instructie werd uitgevoerd.
En wanneer uitgevoerd binnen een opgeslagen procedure of trigger, SYSDATE()
geeft de tijd terug dat het wordt uitgevoerd, terwijl NOW()
geeft de tijd terug waarop de opgeslagen procedure of trigger is gestart.
Voorbeeld
Laten we eerst eens kijken hoe deze twee functies verschillende resultaten kunnen opleveren.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultaat (met verticale uitvoer):
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
Hier gebruikten we de SLEEP()
functie om de verwerking vijf seconden te pauzeren vóór de tweede reeks functieaanroepen.
We kunnen zien dat de tweede keer SYSDATE()
werd aangeroepen, was de geretourneerde waarde anders dan de eerste keer. NOW()
aan de andere kant, gaf beide keren dezelfde waarde terug.
Andere overwegingen
Er zijn een paar andere dingen waar u op moet letten bij deze twee functies:
SET TIMESTAMP
heeft geen invloed opSYSDATE()
, terwijl het doet invloed op deNOW()
functie.SYSDATE()
is onveilig voor replicatie als binaire logboekregistratie op basis van instructies wordt gebruikt. Er zijn echter manieren om hiermee om te gaan, indien nodig. U kunt--sysdate-is-now
. gebruiken commando is een niet-standaard optie voor aliasSYSDATE()
naarNOW()
om het veilig te maken voor replicatie. Zie de MariaDB-documentatie voorSYSDATE()
voor meer informatie.