para cada fila afectada por la función. Eliminar activadores
Para eliminar un disparador, use el DROP TRIGGER
declaración:
DROP TRIGGER <trigger name>;
Alternativamente, use:
DROP TRIGGER IF EXISTS <trigger name>;
El mensaje de error no aparece porque no hay activador, por lo que no se imprime ninguna advertencia.
Crear base de datos de ejemplo
Cree una base de datos para los códigos de ejemplo de activación con la siguiente estructura:
1. Cree una tabla llamada persona con nombre y edad para columnas.
CREATE TABLE person (name varchar(45), age int);
Inserte datos de muestra en la tabla:
INSERT INTO person VALUES ('Matthew', 25), ('Mark', 20);
Seleccione la tabla para ver el resultado:
SELECT * FROM person;
2. Cree una tabla llamada average_age con una columna llamada promedio :
CREATE TABLE average_age (average double);
Inserte el valor de edad promedio en la tabla:
INSERT INTO average_age SELECT AVG(age) FROM person;
Seleccione la tabla para ver el resultado:
SELECT * FROM average_age;
3. Cree una tabla llamada person_archive con nombre , edad y tiempo columnas:
CREATE TABLE person_archive (
name varchar(45),
age int,
time timestamp DEFAULT NOW());
Crear un activador ANTES DE INSERTAR
Para crear un BEFORE INSERT
disparador, usa:
CREATE TRIGGER <trigger name> BEFORE INSERT
ON <table name>
FOR EACH ROW
<trigger body>;
El BEFORE INSERT
trigger da control sobre la modificación de datos antes de confirmar en una tabla de base de datos. Usar mayúsculas para mantener la coherencia, verificar la longitud de una entrada o detectar entradas defectuosas con BEFORE INSERT
los disparadores proporcionan además limitaciones de valor antes de ingresar nuevos datos.
ANTES DE INSERTAR Ejemplo de activación
Cree un BEFORE INSERT
activador para verificar el valor de edad antes de insertar datos en la persona tabla:
delimiter //
CREATE TRIGGER person_bi BEFORE INSERT
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;
La inserción de datos activa el activador y comprueba el valor de age antes de enviar la información:
INSERT INTO person VALUES ('John', 14);
La consola muestra el mensaje de error descriptivo. Los datos no se insertan en la tabla debido a que falló la verificación del disparador.
Crear un disparador DESPUÉS DE INSERTAR
Crear un AFTER INSERT
desencadenar con:
CREATE TRIGGER <trigger name> AFTER INSERT
ON <table name>
FOR EACH ROW
<trigger body>;
El AFTER INSERT
el disparador es útil cuando la fila ingresada genera un valor necesario para actualizar otra tabla.
Ejemplo de activador DESPUÉS DE INSERTAR
Insertar una nueva fila en la persona la tabla no actualiza automáticamente el promedio en el average_age mesa. Crear un AFTER INSERT
activar en la persona tabla para actualizar el average_age tabla después de insertar:
delimiter //
CREATE TRIGGER person_ai AFTER INSERT
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;
Insertar una nueva fila en la persona table activa el gatillo:
INSERT INTO person VALUES ('John', 19);
Los datos se confirman con éxito en la persona tabla y actualiza el average_age tabla con el valor medio correcto.
Crear un disparador ANTES DE ACTUALIZAR
Haga un BEFORE UPDATE
desencadenar con:
CREATE TRIGGER <trigger name> BEFORE UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;
El BEFORE UPDATE
los disparadores van junto con BEFORE INSERT
disparadores Si existen restricciones antes de insertar datos, los límites también deben estar allí antes de actualizar.
Ejemplo de activación ANTES DE LA ACTUALIZACIÓN
Si hay una restricción de edad para la persona tabla antes de insertar datos, la restricción de edad también debe existir antes de actualizar la información. Sin BEFORE UPDATE
disparador, el disparador de verificación de edad es fácil de evitar. Nada restringe la edición a un valor defectuoso.
Agregue un BEFORE UPDATE
disparador a la persona tabla con el mismo cuerpo que BEFORE INSERT
disparador:
delimiter //
CREATE TRIGGER person_bu BEFORE UPDATE
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50002' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;
Al actualizar un valor existente, se activa la verificación del disparador:
UPDATE person SET age = 17 WHERE name = 'John';
Actualización de la edad a un valor inferior a 18 muestra el mensaje de error y la información no se actualiza.
Crear un activador DESPUÉS DE LA ACTUALIZACIÓN
Use el siguiente bloque de código para crear un AFTER UPDATE
disparador:
CREATE TRIGGER <trigger name> AFTER UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;
El AFTER UPDATE
trigger ayuda a realizar un seguimiento de los cambios realizados en los datos. La mayoría de las veces, cualquier cambio después de insertar información también ocurre después de actualizar los datos.
Ejemplo de activación DESPUÉS DE ACTUALIZAR
Cualquier actualización exitosa de la edad datos en la tabla persona también debe actualizar el valor promedio intermedio calculado en el average_age mesa.
Crea un AFTER UPDATE
activador para actualizar el average_age tabla después de actualizar una fila en la persona tabla:
delimiter //
CREATE TRIGGER person_au AFTER UPDATE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;
Actualizar los datos existentes cambia el valor en la persona tabla:
UPDATE person SET age = 21 WHERE name = 'John';
Actualizando la tabla persona también actualiza el promedio en el average_age mesa.
Crear un disparador ANTES DE ELIMINAR
Para crear un BEFORE DELETE
disparador, usa:
CREATE TRIGGER <trigger name> BEFORE DELETE
ON <table name>
FOR EACH ROW
<trigger body>;
BEFORE DELETE
disparador es esencial por razones de seguridad. Si una tabla principal tiene elementos secundarios adjuntos, el activador ayuda a bloquear la eliminación y evita las tablas huérfanas. El activador también permite archivar datos antes de eliminarlos.
Ejemplo de activador ANTES DE ELIMINAR
Archive los datos eliminados creando un BEFORE DELETE
gatillo en la mesa persona e inserte los valores en el person_archive tabla:
delimiter //
CREATE TRIGGER person_bd BEFORE DELETE
ON person
FOR EACH ROW
INSERT INTO person_archive (name, age)
VALUES (OLD.name, OLD.age); //
delimiter ;
Eliminación de datos de la tabla persona archiva los datos en person_archive tabla antes de eliminar:
DELETE FROM person WHERE name = 'John';
Insertar el valor de nuevo en la persona table mantiene el registro de los datos eliminados en el person_archive tabla:
INSERT INTO person VALUES ('John', 21);
BEFORE DELETE
trigger es útil para registrar cualquier intento de cambio de tabla.
Crear un disparador DESPUÉS DE ELIMINAR
Haz un AFTER DELETE
desencadenar con:
CREATE TRIGGER <trigger name> AFTER DELETE
ON <table name>
FOR EACH ROW
<trigger body>;
El AFTER DELETE
los activadores mantienen actualizaciones de información que requieren que la fila de datos desaparezca antes de realizar las actualizaciones.
Ejemplo de activador DESPUÉS DE ELIMINAR
Crear un AFTER DELETE
gatillo en la mesa persona para actualizar el average_age tabla con la nueva información:
delimiter //
CREATE TRIGGER person_ad AFTER DELETE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(person.age) FROM person); //
delimiter ;
Eliminación de un registro de la tabla persona actualiza el average_age tabla con el nuevo promedio:
Sin AFTER DELETE
activador, la información no se actualiza automáticamente.
Crear disparadores múltiples
MySQL no admite que se activen varios disparadores al mismo tiempo. Sin embargo, es posible agregar varias operaciones lógicas al mismo disparador. Usa el BEGIN
y END
delimitadores para indicar el cuerpo del disparador:
CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
BEGIN
<trigger body>;
END;
Asegúrese de cambiar el delimitador predeterminado antes de crear un activador con varias operaciones.
Mostrar disparadores
Enumere todos los disparadores en una base de datos con:
SHOW triggers;
El resultado muestra una lista de todos los activadores, incluido el nombre y el contenido de la instrucción:
También se muestra otra información, como la hora de creación y el usuario que creó el disparador.