MySQL触发器

触发器

1、概述

  • 触发器:是一个特殊的存储过程 它是MySQL在insert update delete 的时候自动执行 不能手动调用

  • 四个要素

    • 监视地点 table
    • 监视时间 (insert/update/delete)
    • 触发时间(after/before)
    • 触发时间 (insert/update/delete)
  • 主体结构

    create trigger trigger_name
    after/before  insert/update/delete on table_name
    for each row
    begin
    sql语句(触发的语句可以是一条也可以是多条)
    end;
    

2、创建表

  • goods 商品表

    create table goods(
    	goods_id int unsigned primary key auto_increment,
        goods_name varchar(20),
        goods_num int unsigned
    )
    
  • order 订单表

    create table `order`(
    	order_id int unsigned primary key auto_increment,
        goods_id int unsigned,
        order_num tinyint
    )
    
  • 添加商品数据

    insert into goods values(null,'iPhone13', 100),(null,'watch',20),(null,'平板', 30);

3、下订单商品对应减少

  • 分析

    监视地点 order表

    监视事件 insert

    触发时间 insert之后

    触发事件 update操作

  • 实例

    create trigger t1
    after insert on `order`
    for each row
    begin
    update goods set goods_num=goods_num-new.order_num where goods_id=new.goods_id;
    end;
    
  • new的含义

    new代表新增的一条数据 行中每一列的值使用new.列名来代替

  • 插入语句

    insert into `order` values(null, 1, 5);
    

4、撤销订单

  • 分析

    监视地点 order表

    监视事件 delete

    触发时间 delete之后

    触发事件 update操作

  • 实例

    drop trigger if exists t1;  
    create trigger t2
    after delete on `order`
    for each row
    begin
    update goods set goods_num=goods_num+old.order_num where goods_id=old.goods_id;
    end;
    

    删除触发器:drop trigger if exists t1;

  • 删除刚才所下的订单

    delete from `order` where order_id=1;
    

5、修改订单

  • 步骤

    • 撤销订单
    • 新增订单
  • 实例

    drop trigger if exists t2;  
    create trigger t3
    after update on `order`
    for each row
    begin
    --撤销订单
    update goods set goods_num=goods_num+old.order_num where goods_id=old.goods_id;
    --新增订单
    update goods set goods_num=goods_num-new.order_num where goods_id=new.goods_id;
    end;
    
  • 修改订单数量

    update `order` set order_num=10 where order_id=2;
    
  • 商品表执行了两次动作

    • 先将商品的数量和订单的数量累加在一起
    • 减掉订单的数量 则为当前商品的剩余数量
posted @ 2022-03-16 15:41  寻月隐君  阅读(49)  评论(0编辑  收藏  举报