触发器(trigger)

作者: 诗人小坏 | 来源:发表于2017-10-27 14:17 被阅读0次

    修改mysql定界符

    delimiter+定界符
    eg:delimiter $

    查看所有触发器

    show triggers 定界符;
    eg:show triggers $

    删除触发器

    drop trigger 触发器名称+定界符
    eg:drop trigger tg1 $

    创建触发器

    注意:

    • 同一个数据库的触发器名称不能重复
    • 同一张表的同一个事件不能有两个触发器
    以商品表和订单表为例

    tp_goods

    CREATE TABLE tp_goods (
    id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '缂栧彿',
    name varchar(255) NOT NULL COMMENT '鍟嗗搧鍚嶇О',
    num int(10) unsigned NOT NULL COMMENT '搴撳瓨閲?,
    PRIMARY KEY (id)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

    tp_orders

    CREATE TABLE tp_orders (
    oid int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '璁㈠崟id',
    gid int(10) unsigned NOT NULL COMMENT '鍟嗗搧id',
    much int(10) unsigned NOT NULL COMMENT '鍟嗗搧鏁伴噺',
    PRIMARY KEY (oid)
    ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

    触发器1(添加数据):

    监视订单表,插入数据后,修改商品表库存量
    create trigger tg1
    before insert on tp_orders
    for each row
    begin
    -- 根据商品id 查询商品表的商品数量
    -- 在mysql中定义变量
    declare rnum int;
    select num into rnum from tp_goods where id = new.gid;
    if new.much>rnum
    then set new.much = rnum;
    end if;
    update tp_goods set num=num-new.much where id = new.gid;
    end$

    触发器2(修改数据):

    监视订单表,修改数据后,修改商品表的库存量
    create trigger tg2
    before update on tp_orders
    for each row
    begin
    -- 查询商品表剩余库存量
    declare rnum int;
    select num into rnum from tp_goods where id = new.gid;
    if rnum+old.much<new.much
    then
    set new.much = rnum + old.much;
    end if;
    update tp_goods set num = num + old.much - new.much where id = new.gid;
    end$

    触发器3(删除数据):

    监视订单表, 删除数据后,修改商品表记录
    create trigger tg3
    after delete on tp_orders
    for each row
    begin
    update tp_goods set num = num + old.much where id = old.gid;
    end$

    相关文章

      网友评论

        本文标题:触发器(trigger)

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