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 warningActualizar 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
