En MariaDB, el SYSDATE()
y NOW()
Las funciones son similares en el sentido de que devuelven la fecha y la hora actuales.
Sin embargo, hay una diferencia importante:SYSDATE()
devuelve la hora en que se ejecuta, mientras que NOW()
devuelve la hora en que la declaración comenzó a ejecutarse.
Y cuando se ejecuta dentro de un procedimiento almacenado o disparador, SYSDATE()
devolverá la hora en que se ejecuta, mientras que NOW()
devolverá la hora en que el procedimiento almacenado o el disparador comenzaron a ejecutarse.
Ejemplo
Primero, veamos cómo estas dos funciones pueden producir resultados diferentes.
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultado (usando salida 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
Aquí, usamos el SLEEP()
función para pausar el procesamiento durante cinco segundos antes del segundo lote de llamadas de función.
Podemos ver que la segunda vez SYSDATE()
fue invocado, su valor de retorno fue diferente a la primera vez. NOW()
por otro lado, devolvió el mismo valor en ambas ocasiones.
Otras consideraciones
Hay algunas otras cosas a tener en cuenta con estas dos funciones:
SET TIMESTAMP
no afecta aSYSDATE()
, mientras que sí afectar elNOW()
función.SYSDATE()
no es seguro para la replicación si se utiliza el registro binario basado en declaraciones. Sin embargo, hay maneras de lidiar con esto, si es necesario. Puede usar--sysdate-is-now
el comando es una opción no predeterminada para aliasSYSDATE()
aNOW()
para que sea seguro para la replicación. Consulte la documentación de MariaDB paraSYSDATE()
para más información.