I MariaDB, SYSDATE()
och NOW()
funktioner är lika genom att de returnerar aktuellt datum och tid.
Det finns dock en viktig skillnad:SYSDATE()
returnerar tiden som den körs, medan NOW()
returnerar den tid då satsen började köras.
Och när den körs inom en lagrad procedur eller trigger, SYSDATE()
returnerar tiden som den körs, medan NOW()
returnerar tiden som den lagrade proceduren eller triggern började exekvera.
Exempel
Låt oss först titta på hur dessa två funktioner kan ge olika resultat.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultat (med vertikal utdata):
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
Här använde vi SLEEP()
funktion för att pausa bearbetningen i fem sekunder innan den andra raden av funktionsanrop.
Vi kan se det andra gången SYSDATE()
anropades var dess returvärde annorlunda än första gången. NOW()
å andra sidan, returnerade samma värde båda gångerna.
Övriga överväganden
Det finns några andra saker att tänka på med dessa två funktioner:
SET TIMESTAMP
påverkar inteSYSDATE()
, medan det gör påverkaNOW()
fungera.SYSDATE()
är osäker för replikering om satsbaserad binär loggning används. Det finns dock sätt att hantera detta, om det behövs. Du kan använda--sysdate-is-now
kommandot är ett icke-standardalternativ till aliasSYSDATE()
tillNOW()
för att göra det säkert för replikering. Se MariaDB-dokumentationen förSYSDATE()
för mer information.