Sunteți pe pagina 1din 6

Trigger

Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla y se activa cuando ocurre
un evento en particular para esa tabla. El disparador queda asociado a la tabla "nombre de la tabla" y no puede ser
una vista.
El momento en que el disparador entra en accin puede ser antes o despus que la sentencia lo activa.
Existe un evento que activa al disparador que puede ser un insert, update o delete.
No puede haber 2 disparadores en una misma tabla que corresponden al mismo momento y sentencia.
Sintaxis:
create trigger <nombre> before/after
insert/delete/update
on nombre tabla
for each row
begin
(accion que se va a realizar)
end;
Ejemplo:
delimiter /
create trigger tr_ventasInsert after insert on ventas
for each row begin
update productos set stock = stock-new.cantidad
where IdProductos = new.ProductoId;
end / delimiter;
#insert into ventas(id, idProducto, cantidad) values('1',1,2)
#insert into ventas values(1,3,20)

Trigger Delete

Trigger Insert

delimiter |
create trigger tr_ventasDelete after delete
on ventas
for each row begin
update productos set stock = stock old.cantidad
where IdProductos = old.ProductoId;
end | delimiter ;

delimiter |
create trigger tr_ventasInsert
before insert on ventas
for each row begin
select stock into @stock
from productos
where IdProductos = new.ProductoId;

Trigger Update
delimiter |
create trigger tr_ventasUpdate
after update on ventas
for each row begin
if(old.Cantidad > new.Cantidad) then
update productos
set Stock= Stock + (old.Cantidad new.Cantidad)
where IdProductos = old.ProductoId;
else
update productos
set Stock = Stock - (new.Cantidad old.Cantidad)
where IdProductos = old.ProductoId;
end if;
end
| delimiter ;

if (new.cantidad <= @stock)


then update productos
set stock = stock-new.cantidad
where IdProducto = new.ProductoId;
set new.Estado = "EXITOSA";
else
if (@stock = 0)
then set new.cantidad = 0;
set newproductos.Estado = "NO EXITOSA";
else
update productos set stock = 0
where IdProducto = new.ProductoId;
set new.Cantidad = @stock;
set new.Estado = "EXITOSA";
end if;
end if;
end
| delimiter ;

Secciones y empleados
New sueldo = 500 Old sueldo 400

EMPLEADOS
IdEmpleados
CodigoSeccion
Nombre
Domicilio
Sueldo

Trigger Delete
delimiter |
create trigger tr_DeleteEmpleado
before delete on empleados
for each row begin
update secciones
set NoEmpleados=NoEmpleados -1
where Codigo=old.CodigoSeccion;
end;
| delimiter ;

SECCION
Codigo
Nombre
SueldoMax
NoEmpleados

Trigger Update

delimiter |
create trigger tr_InserEmpleado
before insert on empleados
for each row
begin
select sueldoMax into @sueldoMax
from secciones
where Codigo=new.CodigoSeccion;

Trigger Insert

delimiter |
create trigger tr_InserEmpleado
before insert on empleados
for each row
begin
select sueldoMax into @sueldoMax
from secciones
where Codigo=new.CodigoSeccion;
update secciones
set noEmpleados=noEmpleados+1
where Codigo=new.codigoSeccion;
if(new.sueldo>@sueldoMax) then
set new.sueldo=@sueldoMax;
set new.Diferencia=0;
else if(new.sueldo<@sueldoMax) then
set new.Diferencia=@sueldoMaxnew.sueldo;
end if;
end if;
end
| delimiter ;

if(new.sueldo>@SueldoMax) then
set new.sueldo=@sueldoMax;
set new.Diferencia=0;
else if(new.sueldo<@sueldoMax) then
set new.Diferencia=@sueldoMaxnew.sueldo;
end if ;
end if;
if(new.CodigoSeccion!=old.CodigoSeccion)
then
update secciones
set NoEmpleados=NoEmpleados -1
where Codigo=old.CodigoSeccion;
update secciones
set NoEmpleados=NoEmpleados + 1
where Codigo=new.CodigoSeccion;
end if;
end
| delimiter ;

REGISTROS EN UN CLUB
Trigger Update
create trigger tr_UpdateRegistro
before update on registro
for each row begin
select Costo into @Costo from club
where Nombre=new.Club;
if(new.Inscrito="N") then
update club set MontoTotal = MontoTotal@Costo
where Nombre=new.Club;
insert into morosos(Fecha, Deuda, RFC)
values (now(), @Costo, new.RFC);
else update
club set MontoTotal = MontoTotal+@Costo
where Nombre=new.Club;
delete from morosos
where RFC=new.RFC and Deuda=@Costo;

Trigger Insert
create trigger tr_InserEmpleado
before insert on empleados
for each row begin

select Costo into @Costo from club


where Nombre=new.Club;
if(new.Inscrito="N") then
insert into morosos(Fecha, Deuda, RFC)
values (now(), @Costo, new.RFC);
else
update
club set MontoTotal = MontoTotal+@Costo
where Nombre=new.Club;
end if;

end if;
end;
end;

fruteria
Crear un trigger para la base de datos frutera.
Para almacenar las comisiones recibidas por da hechas por los vendedores de la frutera, de tal manera que cada
vez que realice una venta recibir una comisin que se ver reflejada en la tabla comisiones.
Si la venta es mayor a 500 pesos, la comisin ser del 10%
Si la venta es menor la comisin ser del 3% de lo vendido.
Nota: hay que tener en cuenta que el vendedor realizara ms de una venta, por lo cual implica que en la tabla
de comisiones ya existe la comisin para ese da.
Trigger Insert
delimiter | create trigger tr_InsertVenta
from ventas
after for each row
begin
select precio * new.Kilos
into @ventas from venta
where new.codproducto=idproducto;
select count(*)
into @dia from comisiones
where fecha=new.fecha and idvendedor=new.CodVendedor;
if(@venta > 500) then
set @comision=@ventas*0.1
else
set @comision=@ventas*.03
end if;
if(@dia =1)then
update comisiones
set new.comision = @comision + comision
where idvendedor = new.CodVendedor;
else
insert into comisiones values (new.CodVendedor, new.fecha, @comision)
end if;
end
| delimiter ;

Sesion
Usuario
Nombre
Contrasea

Historial
Datos (Nombre, Contrasea)
Fecha
Movimiento

Para encriptar contraseas md5()


select * from usuario where contrasea = md5('Juan')

Encriptar y guardar en el historial los movimientos que se realizaron junto con los dato y la hora que se
realiz.

Trigger Insert

set new.nombre=old.nombre;
set new.contrasea=md5(new.contrasea);

delimiter |
create trigger tr_insertUsuario
before insert on usuario
for each row
begin

insert into historial


(datos, fecha, movimiento) values
(concat("NOMBRE:",old.nombre,"CONTRASEA:",
new.contrasea), now(), "MODIFICADO");

set new.contrasea=md5(new.contrasea);

end | delimiter ;

insert into historial


(datos, fecha, movimiento) values
(concat("NOMBRE:",new.nombre,"CONTRASEA:",
new.contrasea), now(), "INSERTADO");

Trigger Delete

end | delimiter ;
Trigger Update
delimiter |
create trigger tr_UpdateUsuario
before update on usuario
for each row
begin

delimiter |
create trigger tr_DeleteUsuario
before delete on usuario
for each row begin
insert into historial
(datos, fecha, movimiento) values
(concat("NOMBRE:",old.nombre," CONTRASEA:",
old.contrasea), now(), "ELIMINADO");
end | delimiter ;

S-ar putea să vă placă și