MySQL 触发器,存储过程详解

MySQL创建触发器和存储过程的语句与SQLserver是有一定的区别的,本文主要讲解MySQL创建触发器与存储过程的sql语句。

1、首先讲解创建存储过程:

结合具体实例进行讲解

CREATE procedure inventory_change_record (IN iny_code VARCHAR(255),IN iny_name VARCHAR(255),IN iny_specification VARCHAR(255),IN iny_number INT)
-- inventory_change_record为存储过程的名称  ()中的内容为参数,IN代表输入参数  OUT代表输出参数  INOUT表示输入输出参数
-- MySQL中  每一个SQL语句的结束都要加分号 不能缺少
BEGIN  -- BEGIN  存储过程代码块开始
    DECLARE inyvt_code VARCHAR(255);   -- DECLARE定义局部变量  注意:最后的分号不能缺少
    DECLARE inyvt_name VARCHAR(255);
    DECLARE inyvt_specification VARCHAR(255);
    DECLARE inyvt_number INT;
    DECLARE inyvt_seq INT;
    SET inyvt_code = iny_code;   -- set 将输入的参数赋给定义好的变量
    SET inyvt_name = iny_name;
    SET inyvt_specification = iny_specification;
    SET inyvt_number = iny_number;
    SET inyvt_seq = (SELECT MAX(seq) FROM inventoryvariation WHERE code = inyvt_code);
    IF inyvt_seq is NULL THEN     --  IF   THEN   ELSE     END IF  为判断语句格式,每个代码块后面的分号不能缺少
        SET inyvt_seq = 1;
    ELSE
        SET inyvt_seq = inyvt_seq + 1;
    END IF;
    insert INTO inventoryvariation(id,code,name,specification,number,seq,changetime) VALUES(UUID(),inyvt_code,inyvt_name,inyvt_specification,inyvt_number,inyvt_seq,NOW());
END   --  END 存储过程代码块结束

2、调用存储过程

CALL inventory_change_record('22','11','11',6)         call调用存储过程,括号中的内容为传递的参数。

3、创建触发器

DELIMITER $  -- 触发器固定格式
    create trigger update_inventory_data after UPDATE
        -- update_inventory_data为触发器名称
        -- after 触发时机  有两种  BEFORE/after
        -- update 触发事件  有三种  INSERT/UPDATE/DELETE
    on inventory for each row
        -- inventory 数据库的表名,也就是执行触发器的表
    begin  -- 代码块的开始
    CALL inventory_change_record(new.code,new.name,new.specification,new.number);  -- 在代码块里面执行上面写好的存储过程  new为变化后的数据;old为变化前的数据
    end$  -- 代码块的结束
DELIMITER ;  -- 触发器固定格式

你可能感兴趣的:(MySQL 触发器,存储过程详解)