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.

  1. Eventos del Motor: Un trigger se activa automáticamente ante eventos DML: INSERT, UPDATE o DELETE.
  2. 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.
  3. Pseudo-filas OLD y NEW: Son fundamentales. OLD representa los datos antes del cambio y NEW los datos que se intentan guardar. Esto nos permite detectar exactamente qué columna fue modificada.
  4. Uso de DELIMITER: MySQL utiliza el ; para terminar sentencias. Al crear un Trigger con varias líneas, debemos usar DELIMITER // para que el motor entienda que todo el bloque BEGIN...END es 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.

Enlaces relacionados