DROP TRIGGER

DROP TRIGGER elimina un trigger de la base de datos. Una vez eliminado, el trigger dejará de ejecutarse cuando ocurra el evento asociado.

Sintaxis

-- Eliminar un trigger
DROP TRIGGER nombre_trigger;
 
-- Eliminar si existe
DROP TRIGGER IF EXISTS nombre_trigger;
 
-- Con esquema explícito
DROP TRIGGER IF EXISTS tienda_mysql.nombre_trigger;

Ejemplo básico

-- Crear un trigger
DELIMITER //
 
CREATE TRIGGER tr_test
BEFORE INSERT ON productos
FOR EACH ROW
BEGIN
    SET NEW.nombre = TRIM(NEW.nombre);
END //
 
DELIMITER ;
-- Verificar que existe
SHOW TRIGGERS WHERE `Table` = 'productos';
-- Eliminar
DROP TRIGGER tr_test;
 
-- Verificar que se eliminó
SHOW TRIGGERS WHERE `Table` = 'productos';

IF EXISTS

-- Sin IF EXISTS: error si no existe
-- DROP TRIGGER tr_inexistente;
-- Error: Trigger does not exist
 
-- Con IF EXISTS: solo warning
DROP TRIGGER IF EXISTS tr_inexistente;
-- Query OK, 0 rows affected, 1 warning

Actualizar un trigger

MySQL no tiene ALTER TRIGGER. Para modificar un trigger, debes eliminarlo y recrearlo:

-- 1. Ver definición actual
SHOW CREATE TRIGGER tr_productos_before_insert\G
 
-- 2. Eliminar
DROP TRIGGER IF EXISTS tr_productos_before_insert;
 
-- 3. Recrear con cambios
DELIMITER //
 
CREATE TRIGGER tr_productos_before_insert
BEFORE INSERT ON productos
FOR EACH ROW
BEGIN
    SET NEW.nombre = TRIM(NEW.nombre);
    IF NEW.stock IS NULL THEN
        SET NEW.stock = 0;
    END IF;
    IF NEW.precio <= 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'El precio debe ser positivo';
    END IF;
END //
 
DELIMITER ;

Eliminar todos los triggers de una tabla

MySQL no tiene un comando directo, pero puedes generar las sentencias:

SELECT CONCAT('DROP TRIGGER IF EXISTS ', TRIGGER_NAME, ';') AS comando
FROM information_schema.TRIGGERS
WHERE TRIGGER_SCHEMA = 'tienda_mysql'
AND EVENT_OBJECT_TABLE = 'productos';

Consideraciones

  • Al eliminar una tabla con DROP TABLE, todos sus triggers se eliminan automáticamente
  • Al truncar una tabla con TRUNCATE TABLE, los triggers no se ejecutan ni se eliminan
  • Si un trigger referencia a una tabla que se elimina, el trigger seguirá existiendo pero fallará al ejecutarse

Permisos necesarios

Para eliminar un trigger necesitas el privilegio TRIGGER en la tabla asociada.

Limpieza

DROP TRIGGER IF EXISTS tr_test;
DROP TRIGGER IF EXISTS tr_productos_before_insert;

Con esto completamos la sección de triggers. Hemos cubierto los seis tipos de triggers, cómo listarlos y cómo eliminarlos. En la siguiente sección exploraremos las transacciones en MySQL.

Escrito por Eduardo Lázaro