Solución Rápida (Code Snippet)
Crea una tabla de logs y un trigger para auditar los cambios en tus registros de forma automática sin tocar tu código PHP.
-- 1. Crear tabla para almacenar el historial de cambios
CREATE TABLE auditoria_usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario_id INT,
accion ENUM('INSERT', 'UPDATE', 'DELETE'),
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
detalles TEXT
);
-- 2. Trigger para auditar actualizaciones (UPDATE)
DELIMITER //
CREATE TRIGGER tr_auditoria_usuarios_update
AFTER UPDATE ON usuarios
FOR EACH ROW
BEGIN
-- Comparamos valores antiguos (OLD) con los nuevos (NEW)
IF OLD.email <> NEW.email THEN
INSERT INTO auditoria_usuarios (usuario_id, accion, detalles)
VALUES (NEW.id, 'UPDATE', CONCAT('Email cambiado de: ', OLD.email, ' a: ', NEW.email));
END IF;
END //
DELIMITER ;
Cómo funciona
Los Triggers (disparadores) actúan como centinelas automáticos dentro de MySQL, permitiendo ejecutar lógica directamente en la capa de datos de forma transparente para la aplicación.
- Eventos del Motor: Un trigger se activa automáticamente ante eventos DML:
INSERT,UPDATEoDELETE. - Momento de Ejecución: En este ejemplo usamos
AFTER UPDATE, lo que significa que el log solo se guarda si la actualización en la tabla principal fue exitosa. - Pseudo-filas OLD y NEW: Son fundamentales.
OLDrepresenta los datos antes del cambio yNEWlos datos que se intentan guardar. Esto nos permite detectar exactamente qué columna fue modificada. - Uso de DELIMITER: MySQL utiliza el
;para terminar sentencias. Al crear un Trigger con varias líneas, debemos usarDELIMITER //para que el motor entienda que todo el bloqueBEGIN...ENDes una sola instrucción.
Preguntas Frecuentes
¿Qué es un Trigger en MySQL?
Un Trigger o disparador es un objeto de base de datos que se ejecuta automáticamente cuando ocurre un evento específico (INSERT, UPDATE o DELETE) en una tabla determinada.
¿Afectan los Triggers al rendimiento?
Sí, cada Trigger añade un pequeño tiempo de procesamiento a la operación original. Por ello, se recomienda mantener la lógica dentro del Trigger lo más simple y eficiente posible.