sql >> Databáze >  >> RDS >> MariaDB

Rozdíl mezi SYSDATE() a NOW() v MariaDB

V MariaDB, SYSDATE() a NOW() funkce jsou podobné v tom, že vracejí aktuální datum a čas.

Je zde však důležitý rozdíl:SYSDATE() vrátí čas, kdy se provede, zatímco NOW() vrátí čas, kdy se příkaz začal provádět.

A při spuštění v rámci uložené procedury nebo spouštěče SYSDATE() vrátí čas, kdy se provede, zatímco NOW() vrátí čas, kdy se uložená procedura nebo spouštěč začaly provádět.

Příklad

Nejprve se podívejme, jak mohou tyto dvě funkce přinést různé výsledky.

SELECT 
    NOW(),
    SYSDATE(),
    SLEEP(5),
    NOW(),
    SYSDATE();

Výsledek (při použití vertikálního výstupu):

    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

Zde jsme použili SLEEP() funkce pozastaví zpracování na pět sekund před druhou řadou volání funkcí.

Vidíme, že podruhé SYSDATE() byl vyvolán, jeho návratová hodnota byla jiná než poprvé. NOW() na druhé straně vrátil stejnou hodnotu v obou případech.

Další úvahy

U těchto dvou funkcí je třeba mít na paměti několik dalších věcí:

  • SET TIMESTAMP nemá vliv na SYSDATE() , zatímco dělá ovlivnit NOW() funkce.
  • SYSDATE() není bezpečné pro replikaci, pokud se používá binární protokolování založené na příkazech. V případě potřeby však existují způsoby, jak se s tím vypořádat. Můžete použít --sysdate-is-now příkaz není výchozí volbou pro alias SYSDATE() na NOW() aby bylo bezpečné pro replikaci. Viz dokumentaci MariaDB pro SYSDATE() pro více informací.

  1. Migrujte databázi z Postgresu do MySQL

  2. Problémy s voláním uložené procedury z C# s velkým CLOB

  3. seznam oddělený čárkami jako výsledek příkazu select v Oracle

  4. čárkami oddělený řetězec vybraných hodnot v mysql