美文网首页
MYSQL中触发器(trigger)和储存过程(procedur

MYSQL中触发器(trigger)和储存过程(procedur

作者: 芮芮夕 | 来源:发表于2018-03-10 09:17 被阅读0次

    一,触发器(trigger)

    即:在一个表执行(insert,update,delete)操作之前或之后,自动触发了预先编写好的sql语句。

    注意:触发的事件和触发器里的sql语句是一个事务操作,要么全部执行,要么都不执行;

    语法:

    CREATE TRIGGER triggerName

    AFTER/BEFORE #触发时间 在操作之前或之后执行下面的sql

    INSERT/UPDATE/DELETE #监视操作

    ON tabel_name #监视对象

    FOR EACH ROW  #这句话在mysql是固定的

    BEGIN

    sql...;

    END;

    AFTER#是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;

    BEFORE#是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;

    例:

    当一个订单产生时,商品库存对应减少

    订单表 order_base 字段 order_id,order_goods_id,order_goods_num

    商品表 goods_base 字段 goods_id,goods_num

    //设置定界符

    DELIMITER $$

    CREATE TRIGGER order_add_goods_decu

    AFTER#触发时间

    INSERT#监视操作

    ON order_base#监视对象

    FOR EACH ROW

    BEGIN

    UPDATE goods_base SET goods_num = goods_num - new.order_goods_num WHERE goods_id = new.order_goods_id; #触发事件

    END$$

    DELIMITER ;

    (new.field:添加数据,old.field:删除或需要更新的数据)

    for each row 的作用:每影响一行触发一次,如果在影响100行,执行100次

    二,储存过程(procedure)

    语法:

    DELIMITER $$

    CREATE PROCEDURE procedureName()

    BEGIN

    sql...

    END$$

    DELIMITER ;

    #查看procedure

    SHOW PROCEDURE STATUS;

    #调用procedure

    CALL procedureName();

    #在储存过程中调用参数

    DELIMITER $$

    CREATE PROCEDURE goods_name(goods_id INT,goods_common_id INT)

    BEGIN

    SELECT CONCAT('id',goods_id,'name',goods_common_id);

    SELECT CONCAT('info',goods_common_id);

    END$$

    DELIMITER ;

    #调用procedure

    CALL goods_name(10,12);

    DECLARE column_name INT() DEFAULT 0;#DECLARE 在存储过程和函数的BEGIN与END之间定义变量(DECLARE 和SET的区别)

    CONCAT() 函数用于将多个字符串连接成一个字符串,如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

    相关文章

      网友评论

          本文标题:MYSQL中触发器(trigger)和储存过程(procedur

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