Triggers
QUE ES
Un "trigger" (disparador o desencadenador) es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar los datos de una tabla (o vista).
Se definen para una tabla (o vista) específica, si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla en la que se definió un disparador para alguna de estas acciones (inserción, actualización y eliminación), el disparador se ejecuta (se dispara) en forma automática.
Los disparadores se ejecutan DESPUES de la ejecución de una instrucción "insert", "update" o "delete" en la tabla en la que fueron definidos. Las restricciones se comprueban ANTES de la ejecución de una instrucción "insert", "update" o "delete". Por lo tanto, las restricciones se comprueban primero, si se infringe alguna restricción, el desencadenador no llega a ejecutarse.
FUNCIONALIDAD
Los Triggers son usados para mejorar la administración de la Base de Datos, sin necesidad de que el usuario ejecute esas sentencias SQL, la utilidad que se le acostumbra mayoritariamente a dar, es para prevenir errores de datos, actualizar tablas, modificar valores, entre muchas utilidades que el administrador le quiera dar.
SINTAXIS BÁSICA

REFERENCIAS
MySQl.(?).Uso de disparadores. https://dev.mysql.com/doc/refman/5.7/en/triggers.html
pagina web. (?). Disparadores (Triggers). https://www.tutorialesprogramacionya.com/sqlserverya/temarios/descripcion.php?cod=147&punto=141&inicio=
Introducción a trigger
Los triggers o disparadores, son procedimientos automaticos que se activan despues de una accion, esta accion puede ser un insert, delete o update
se trabaja con dos identificadores que son after (despues de) before (antes de)
Dentro de las condiciones que tienen los triggers esta que no pueden existir dos o mas after para el insert o para el delete o para el update
El after es el caso mas comun de los triggers, se activa despues de una sentencia y afecta solo tablas distintas a la que lo esta invocando, situacion que no sucede con
el before que solo afecta la tabla que lo invoca
la sintaxis general es
delimiter //
create trigger nombre after (insert, delete, update) on tabla
for each row //recorre fila por fila (arreglos o matrices)
begin
sentencia
end
//
delimiter ;
Crear un trigger con el nombre de valorventa que al insertar un articulo realice el seguiente cálculo
calcular el valorventa de la tabla detalle con un incremento del 23% del valorunitario de la tabla articulo
Análisis:
a) campo a reemplazar: detalle.valorventa
b) Con quien o que lo va a reemplazar: (valorunitario * 0.23) + valorunitario de la tabla articulo
c) condiciones: articulo.codigo = detalle.codigo
d) comando: update
update detalle set valorventa = (select valorunitario + (valorunitario * 0.23) from articulo where articulo.codigo = detalle.codigo);
ejemplo
crear un trigger con el nombre de actualizar_existenciap que al insertar un detalle realiza el siguiente cálculo
calcular las existencias segun la tabla detalle de cada articulo
Análisis:
a) campo a reemplazar: articulo.existencia
b) Con quien o que lo va a reemplazar: ( cantidad - sum (cantidad) from detalle
c) condiciones: articulo.codigo = detalle.codigo
d) comando: update
update articulo set existencia = cantidad - (select sum(cantidad) from detalle group by (codigo) where articulo.codigo = detalle.codigo);
Ejemplo de un trigger: la "idea" es crear un trigger que antes de insertar un producto
calcula el valor de venta.
supongamos la siguiente situacion: en una empresa vende productos y se gana un porcentaje fijo por cada producto.
Cree la siguiente tabla:
delimiter //
create trigger calvalorventa before insert on productos
for each row
set new.valorventa = new.costo + new.porgana/100;
end
//