triggers
DESCRIPTION
Ejercicios de disparadores c#Ejemplios resueltosSecciones y empleadosREGISTROS EN UN CLUBfruteriaSesionTRANSCRIPT
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 acción puede ser antes o después 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
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 ; 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 ;
Trigger Insert delimiter | create trigger tr_ventasInsert before insert on ventas for each row begin select stock into @stock from productos where IdProductos = new.ProductoId; 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
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 ; 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 [email protected]; end if; end if; end | delimiter ;
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; if(new.sueldo>@SueldoMax) then set new.sueldo=@sueldoMax; set new.Diferencia=0; else if(new.sueldo<@sueldoMax) then set [email protected]; 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 ;
EMPLEADOS IdEmpleados CodigoSeccion Nombre Domicilio Sueldo
SECCION Codigo Nombre SueldoMax NoEmpleados
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; end if; end;
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;
fruteria Crear un trigger para la base de datos frutería.
Para almacenar las comisiones recibidas por día hechas por los vendedores de la frutería, de tal manera que cada
vez que realice una venta recibirá una comisión que se verá reflejada en la tabla comisiones.
Si la venta es mayor a 500 pesos, la comisión será del 10%
Si la venta es menor la comisión será del 3% de lo vendido.
Nota: hay que tener en cuenta que el vendedor realizara más de una venta, por lo cual implica que en la tabla
de comisiones ya existe la comisión para ese día.
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 Historial Datos (Nombre, Contraseña) Fecha Movimiento
Para encriptar contraseñas md5()
select * from usuario where contraseña = 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
delimiter | create trigger tr_insertUsuario before insert on usuario for each row begin set new.contraseña=md5(new.contraseña); insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",new.nombre,"CONTRASEÑA:", new.contraseña), now(), "INSERTADO"); end | delimiter ; Trigger Update
delimiter | create trigger tr_UpdateUsuario before update on usuario for each row begin
set new.nombre=old.nombre; set new.contraseña=md5(new.contraseña); insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",old.nombre,"CONTRASEÑA:", new.contraseña), now(), "MODIFICADO"); end | delimiter ; Trigger Delete
delimiter | create trigger tr_DeleteUsuario before delete on usuario for each row begin insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",old.nombre," CONTRASEÑA:", old.contraseña), now(), "ELIMINADO"); end | delimiter ;
Usuario Nombre Contraseña