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 ;  -- 触发器固定格式

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值