W MariaDB SYSDATE()
i NOW()
funkcje są podobne pod tym względem, że zwracają bieżącą datę i godzinę.
Jest jednak ważna różnica:SYSDATE()
zwraca czas wykonania, podczas gdy NOW()
zwraca czas rozpoczęcia wykonywania instrukcji.
A po uruchomieniu w ramach procedury składowanej lub wyzwalacza, SYSDATE()
zwróci czas wykonania, podczas gdy NOW()
zwróci czas rozpoczęcia wykonywania procedury składowanej lub wyzwalacza.
Przykład
Najpierw spójrzmy, jak te dwie funkcje mogą dawać różne wyniki.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Wynik (przy użyciu wyjścia pionowego):
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
Tutaj użyliśmy funkcji SLEEP()
funkcja wstrzymania przetwarzania na pięć sekund przed drugą partią wywołań funkcji.
Widzimy, że za drugim razem SYSDATE()
został wywołany, jego wartość zwracana była inna niż za pierwszym razem. NOW()
z drugiej strony zwrócił tę samą wartość za każdym razem.
Inne uwagi
Przy tych dwóch funkcjach należy pamiętać o kilku innych kwestiach:
SET TIMESTAMP
nie wpływa naSYSDATE()
, podczas gdy tak wpływają naNOW()
funkcjonować.SYSDATE()
jest niebezpieczne dla replikacji, jeśli używane jest rejestrowanie binarne oparte na instrukcjach. Istnieją jednak sposoby radzenia sobie z tym, jeśli jest to wymagane. Możesz użyć--sysdate-is-now
polecenie nie jest domyślną opcją aliasuSYSDATE()
doNOW()
aby był bezpieczny do replikacji. Zobacz dokumentację MariaDB dlaSYSDATE()
aby uzyskać więcej informacji.