No MariaDB, o
SYSDATE()
e NOW()
as funções são semelhantes, pois retornam a data e a hora atuais. No entanto, há uma diferença importante:
SYSDATE()
retorna o tempo de execução, enquanto NOW()
retorna a hora em que a instrução começou a ser executada. E quando executado dentro de um procedimento armazenado ou gatilho,
SYSDATE()
retornará a hora de execução, enquanto NOW()
retornará a hora em que o procedimento armazenado ou gatilho começou a ser executado. Exemplo
Primeiro, vamos ver como essas duas funções podem produzir resultados diferentes.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultado (usando saída vertical):
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
Aqui, usamos o
SLEEP()
função para pausar o processamento por cinco segundos antes do segundo lote de chamadas de função. Podemos ver que na segunda vez
SYSDATE()
foi invocado, seu valor de retorno foi diferente da primeira vez. NOW()
por outro lado, retornou o mesmo valor nas duas vezes. Outras Considerações
Há algumas outras coisas a serem observadas com essas duas funções:
SET TIMESTAMP
não afetaSYSDATE()
, enquanto faz afetar oNOW()
função.SYSDATE()
não é seguro para replicação se o log binário baseado em instrução for usado. No entanto, existem maneiras de lidar com isso, se necessário. Você pode usar--sysdate-is-now
command é uma opção não padrão para aliasSYSDATE()
paraNOW()
para torná-lo seguro para replicação. Veja a documentação do MariaDB paraSYSDATE()
para mais informações.