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