В MariaDB, SYSDATE() и NOW() функциите са подобни по това, че връщат текущата дата и час.
Има обаче важна разлика:SYSDATE() връща времето, през което се изпълнява, докато NOW() връща времето, през което операторът е започнал да се изпълнява.
И когато се изпълнява в рамките на съхранена процедура или тригер, SYSDATE() ще върне времето, през което се изпълнява, докато NOW() ще върне времето, през което съхранената процедура или тригерът е започнал да се изпълнява.
Пример
Първо, нека разгледаме как тези две функции могат да дадат различни резултати.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE(); Резултат (с помощта на вертикален изход):
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
Тук използвахме SLEEP() функция за пауза на обработката за пет секунди преди втората партида функции.
Можем да видим, че вторият път SYSDATE() е извикана, връщаната му стойност е различна от първия път. NOW() от друга страна, върна една и съща стойност и двата пъти.
Други съображения
Има няколко други неща, които трябва да имате предвид при тези две функции:
SET TIMESTAMPне засягаSYSDATE(), докато прави засягаNOW()функция.SYSDATE()не е безопасно за репликация, ако се използва базирано на изрази двоично регистриране. Въпреки това, има начини за справяне с това, ако е необходимо. Можете да използвате--sysdate-is-nowкомандата не е опция по подразбиране за псевдонимSYSDATE()къмNOW()за да го направи безопасно за репликация. Вижте документацията на MariaDB заSYSDATE()за повече информация.