Función NOW() de MySQL
La función `NOW()` de MySQL devuelve la fecha y hora actuales en el formato `YYYY-MM-DD HH:MM:SS`. Se suele utilizar para capturar el momento exacto en que se ejecuta una sentencia SQL. El resultado se basa en la zona horaria actual del servidor, a menos que se configure de otro modo.
Utilización
La función `NOW()` se utiliza cuando necesitas la marca de tiempo actual para operaciones como la inserción de datos, las actualizaciones o el registro dentro de contextos SQL como las sentencias `SELECT` o los procedimientos almacenados. Suele utilizarse para seguir el momento de creación o modificación de un registro.
sql
SELECT NOW();
En esta sintaxis, `NOW()` produce la fecha y hora actuales cuando se ejecuta la consulta.
Ejemplos
1. Recuperar fecha y hora actuales
sql
SELECT NOW();
Este ejemplo devuelve la fecha y hora actuales del servidor.
2. Insertar marca de tiempo actual
sql
INSERT INTO logs (event, created_at)
VALUES ('User login', NOW());
Aquí, la función `NOW()` registra la hora exacta en que un usuario se conecta, almacenándola en la columna `created_at`.
3. Actualizar con marca de tiempo actual
sql
UPDATE orders
SET last_modified = NOW()
WHERE order_id = 102;
Este ejemplo actualiza la columna `last_modified` de un pedido concreto con la marca de tiempo actual, indicando cuándo se realizó el último cambio.
Consejos y buenas prácticas
- Utilízalo en INSERTAR y ACTUALIZAR. Utiliza `NOW()` para marcar automáticamente la fecha y hora de creación o modificación de los registros.
- Combínalo con la configuración de la zona horaria. Asegúrate de que la configuración de la zona horaria de tu base de datos coincide con las necesidades de tu aplicación para obtener marcas horarias precisas. Utiliza funciones como `CONVERT_TZ()` para gestionar eficazmente los husos horarios.
- Considera el impacto en el rendimiento. `NOW()` se evalúa una vez por sentencia, no por fila, lo que mitiga la sobrecarga de rendimiento en consultas grandes.
- Utilizar para registro y auditoría. Utiliza `NOW()` para realizar un seguimiento eficaz de la actividad dentro de tus aplicaciones con fines de depuración y auditoría.
- Compatibilidad de tipos de datos. La función `NOW()` puede almacenarse en columnas `DATETIME` y `TIMESTAMP`, cada una de las cuales tiene propiedades diferentes en cuanto al manejo de la zona horaria y la autoactualización.
- Consideraciones sobre la transacción. Ten cuidado con cómo pueden variar los valores de `NOW()` entre las distintas sentencias de una transacción si se ejecutan en momentos diferentes.
- Distinguir de CURRENT_TIMESTAMP(). Aunque `NOW()` y `CURRENT_TIMESTAMP()` suelen utilizarse indistintamente, existen sutiles diferencias; `CURRENT_TIMESTAMP()` puede ajustarse mediante los atributos `DEFAULT CURRENT_TIMESTAMP` y `ON UPDATE CURRENT_TIMESTAMP` de las definiciones de columna.