今天也是第一次在用到mysql的触发器来自己写了一些触发器的如何建立,及使用。
第一创发触发器
create trigger '触发器的名字' after/befor insert /delete/update on '表名'
for ecah row begin
/**
中间就是一些自己根据业务逻辑去写代码
*/
end;
其中after ,befor 很容易理解就是当这个表发生变化的时候,是在这个表更新之前还是之后让这个触发器去触发 执行相应的存储过程,具体用哪个关键字 ,那要看自己的业务是什么样的。insert /delete /update 是这个表上的相应操作时候 才会有触发器的操作。
DELIMITER $$
USE `cric_crm`$$
DROP TRIGGER /*!50032 IF EXISTS */ `t_trigger_after_delete_on_execuser`$$
CREATE
/*!50017 DEFINER = 'leju'@'%' */
TRIGGER `t_trigger_after_delete_on_execuser` AFTER DELETE ON `t_ad_contract_execuser` /* 在t_ad_contract_execuser表上创建 删除的触发器,并且是在删除以后触发器才开始执行以下的处理*/
FOR EACH ROW BEGIN /*对每行都有影响*/
DECLARE in_ad_type INT DEFAULT 0 ; /*定义变量,这里和其他的高级语言不太一样,其实很想sql里面的语句的*/
DECLARE in_count_type VARCHAR(3) DEFAULT '';
DECLARE in_choose_time VARCHAR(32) DEFAULT '';
DECLARE in_match_process INT DEFAULT 0;
DECLARE is_change INT DEFAULT 0 ;
DECLARE in_priviledge INT DEFAULT 0;
SET in_ad_type = 2;
SET is_change = (SELECT COUNT(*) FROM t_ad_contract_detail WHERE id=old.id);
IF is_change >0 THEN
SELECT priviledge , match_process ,issue_start_time INTO in_priviledge,in_match_process,in_choose_time FROM t_ad_contract_detail WHERE id=old.id ;
/*这个sql语句中 涉及到给上述定义的变量赋值(INTO) 关键字后面的就是对变量赋值*/
IF in_priviledge >= 90000 THEN /*if 判断语句 如果有多个条件的话 用 and /or 因为这会sql里的操作*/
SET in_ad_type = 1 ;ELSE
SET in_ad_type = 2;
END IF ;
IF FLOOR(in_match_process) <1 THEN
SET in_count_type = 'un';
ELSE
SET in_count_type='all';
END IF;
CALL t_procedure_on_ce_delete(old.execuserid ,in_ad_type ,in_count_type,DATE_FORMAT(in_choose_time,'%Y-%m-%e') );
/*调用相应的存储过程,也就是说当这个表中的数据有删除的时候 你想做什么操作,自己定义函数/方法 来进行处理*/
END IF;END;
$$
DELIMITER ;