zoukankan      html  css  js  c++  java
  • [MySQL]触发器

    案列:从新订单表添加购买或退货的数量,然后从goods表总数中增加或减少?

     

    create trigger TriggerName
    after/before 触发时间
    insert/update/delete 监控事件
    on 表名
    for each row
    begin
    sql1;
    ...
    sqlN;
    end

    创建goods表:

    create table goods
                 (
                              git  int
                            , name varchar(20)
                            , num  smallint
                 )
    ;

    创建ord表:

    create table ord
                 (
                              oid  int
                            , gid  int
                            , much smallint
                 )
    ;

    插入goods表种类数据:

    insert into goods values
           (1
                ,'cat', 34
           )
         ,
            (2
                ,'dog', 65
           )
         ,
            (3
                ,'pig', 21
           )
    ;

    简单触发器 insert delete update:

    delimiter $
    create trigger goods_ord_insert after
    insert
    on
           ord for each row begin
    update
           goods
    set    num=num-new.much
    where
           gid=new.gid
    ;

    end$

    delimiter $
    create trigger goods_ord_dele after
    delete
    on
           ord for each row begin
    update
           goods
    set    num=num+old.much
    where
           gid=old.gid
    ;

    end$

    delimiter $
    create trigger update_
    before
    update
    on ord
    for each row
    begin
    update goods set num=num+old.much-new.much where gid=new.gid;
    end$

    触发器升级版:

    如果剩余数量不足则只能卖出剩余数量;

    before   在内存中修改之前做判断还未写到硬盘中;

    after      在内存中修改之后写到硬盘后再去执行;

    select
           num
    into   rnum
    from
           goods
    where
           gid=new.gid
    ;

    if new.much     >rnum then
        set new.much=rnum;
    end if;
    update
           goods
    set    num=num-new.much
    where
           gid=new.gid
    ;

    end$

    for each  row 行级触发器

    遗憾mysql 不支持语句级触发器。

  • 相关阅读:
    「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
    python写一个通讯录
    Git学习笔记
    交换排序
    用Windows自带的方法创建WiFi
    MySQL之触发器
    插入排序
    range和arange的区别
    Spring前后端跨域请求设置
    三、图的定义及遍历
  • 原文地址:https://www.cnblogs.com/kingwwz/p/8484028.html
Copyright © 2011-2022 走看看