美文网首页
MySQL之如何使用触发器

MySQL之如何使用触发器

作者: 帅气的Lucky | 来源:发表于2018-11-13 15:17 被阅读0次

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

    它包含四个要素:

    1. 监视地点(table)

    2. 监视事件(insert/update/delete)

    3. 触发时间(after/before)

    4. 触发事件(insert/update/delete)

    触发器

    1. 语法:
        create trigger trigger_name
    
        after/before   insert/update/delete on tb_name
    
        for each row
    
        begin
    
        sql 语句:(触发的语句一句或者多句)
    
        end;
    
    1. 现有两张表 商品表 goods 和订单表 order 来说明触发器的工作原理;

      MySQL之如何使用触发器
      (http://jingyan.baidu.com/album/154b46311c9aed28cb8f4159.html?picindex=2)
    2. 我们现在往goods表添加四条记录:

     insert into goods (goods_name,goods_num)values("手机",20),("电脑",30),("单反",20);
    
    1. 实现购买任意商品,对应的商品数量相应的减少:

      分析:

      监视地点: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;
    
    1. 如 我们购买5个手机:

      INSERT INTO order (goods_id,order_num) VALUES(1,5);

      注:对于insert 而言 新增的行使用new 来表示,行中的每一列的值用 new.列名来表示

      这时我们会发现goods表、order表的数据如下:

      MySQL之如何使用触发器
      (http://jingyan.baidu.com/album/154b46311c9aed28cb8f4159.html?picindex=4)
    2. 2.撤销订单:

      分析:

      监视地点:order 表

      监视事件:delete操作

      触发时间:在delete操作之后

      触发事件:update操作

        DROP TRIGGER if EXISTS t1;
    
        CREATE TRIGGER t1
    
        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;
    
    1. 现在要取消刚才买的5个手机的订单:

      DELETE FROM order WHERE order_id=1;

      注:对于delete而言 删除的行使用old 来表示, 行中的每一列的值用 old.列名来表示

      这时我们会发现goods表、order表的数据发生了如下的变化:

      MySQL之如何使用触发器

    (http://jingyan.baidu.com/album/154b46311c9aed28cb8f4159.html?picindex=6)

    1. 修改订单(包括修改购买的数量以及购买的商品)

      分两步:

      1. 撤销订单;(delete);

      2. 新增订单:(insert);

        DROP TRIGGER if EXISTS t1;
    
        CREATE TRIGGER t1
    
        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 goods_id=2,order_num=4 WHERE order_id=2;
    
    现在看下两张表的变化:
    
    [![MySQL之如何使用触发器](https://img.haomeiwen.com/i11222021/ac615935f8bf6d7a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](http://jingyan.baidu.com/album/154b46311c9aed28cb8f4159.html?picindex=7) 
    

    (http://jingyan.baidu.com/album/154b46311c9aed28cb8f4159.html?picindex=8)

    注意:

    如果在执行创建触发器的时候语句报错

    那在 语句之前添加

    delimiter $$
    CREATE TRIGGER t1
    AFTER  INSERT ON order
    ...
    

    相关文章

      网友评论

          本文标题:MySQL之如何使用触发器

          本文链接:https://www.haomeiwen.com/subject/bsklfqtx.html