Practical use of triggers

  • We still don't explain the knowledge points, directly practice the code, test and write by ourselves, and it runs normally. The logic is accurate.

topic:

Insert picture description here

  • data sheet:
    Insert picture description here

Problem solving

1.
delimiter $$
create trigger trigger_delete after delete on sell_order
for each row
BEGIN
DECLARE id int;
DECLARE num int;

select sellorderid into id from sell_order where sellorderid = old.sellorderid;
--  不能使用select 这样给num赋值
--  select  sellordernumber into num from sell_order where sellorderid = old.sellorderid;
set num = old.sellordernumber;

update product
set  product.productstocknumber = product.productstocknumber + num, product.productsellnumber = product.productsellnumber - num where product.productid = old.productid;
end $$
delimiter ;


DELETE from sell_order where sellorderid = 31;

drop TRIGGER trigger_delete;


2. 
delimiter $$
create trigger trigger_update after update on sell_order
for each row
BEGIN
DECLARE num int;
--  无论正负值,后面全用加法就可以了
set num = new.sellordernumber - old.sellordernumber;

update product
set  product.productstocknumber = product.productstocknumber - num, 
product.productsellnumber = product.productsellnumber + num 
where product.productid = old.productid;

end $$
delimiter ;

update sell_order
SET sell_order.sellordernumber = 100 where sellorderid = 8;

drop TRIGGER trigger_update;


3.
delimiter $$
create trigger trigger_deleted before delete on employee
for each row
BEGIN
DECLARE id int;
DECLARE num int;
-- 获得员工id值 
set id = old.employeeid;

# 这里必需给num 变量赋初始值,要不然,select赋值时,会出现 num = null的情况,得不到正确结果。
set num = 0;
select count(sellorderid) into num from sell_order where employeeid = id;
if num > 0 then 
	delete from sell_order where employeeid = id;
end if;

end $$
delimiter ;

delete from employee where employeeid = 3;

drop TRIGGER trigger_deleted;


-- 若生成触发器失败则执行:
select version(),
@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Guess you like

Origin blog.csdn.net/pythonstrat/article/details/110775987