sql >> Base de Datos >  >> RDS >> MariaDB

Diferencia entre SYSDATE() y NOW() en MariaDB

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 a SYSDATE() , mientras que afectar el NOW() 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 alias SYSDATE() a NOW() para que sea seguro para la replicación. Consulte la documentación de MariaDB para SYSDATE() para más información.