В 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()
за повече информация.