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 naSYSDATE()
, zatímco dělá ovlivnitNOW()
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 aliasSYSDATE()
naNOW()
aby bylo bezpečné pro replikaci. Viz dokumentaci MariaDB proSYSDATE()
pro více informací.