sql >> Databasteknik >  >> RDS >> MariaDB

Skillnaden mellan SYSDATE() och NOW() i MariaDB

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 inte SYSDATE() , medan det gör påverka NOW() 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 alias SYSDATE() till NOW() för att göra det säkert för replikering. Se MariaDB-dokumentationen för SYSDATE() för mer information.

  1. Cross Domain SQL Server-inloggningar med Windows-autentisering

  2. Beräkna medianen med en dynamisk markör

  3. Sök i Microsoft SQL Server Database efter lagrad data

  4. Hur infogar man värden i tabell med främmande nyckel med MySQL?