1. 程式人生 > >MYSQL5.6建立儲存過程和觸發器

MYSQL5.6建立儲存過程和觸發器

MYSQL支援儲存過程procedure,觸發器triger,event(定時任務)
與oracle的儲存過程,觸發器,job對應。

建立示例:

1.儲存過程

DROP PROCEDURE IF EXISTS `PROC_TEST`;

CREATE DEFINER = `tfm`@`%` PROCEDURE `PROC_TEST`()
    COMMENT '定時統計結果\r\n'
BEGIN 
 DECLARE  linkCount, _ERR int default 0; 
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _ERR=1;
/*查詢數量 註釋型別1*/
select count(0) into linkCount  from t_tfm_link_dir;
-- 寫入結果表 註釋型別2
#儲存結果 註釋型別3
insert into t_tfm_city_trafficindex(cityName,time,updatetime,type,grade) values('漳州',date_format(now(),'%d %h:%i'),now(),linkCount,'abcde'); 
if _ERR=1 THEN
insert into t_tfm_runlog(runtime,funname,errorcode,errordesc) VALUE(now(),'PROC_TEST',_ERR,_ERR);
END IF;
END;


2.觸發器

DROP TRIGGER IF EXISTS `tri_cityname`;
DELIMITER ;;
CREATE TRIGGER `tri_cityname` BEFORE INSERT ON `t_tfm_city_trafficindex` FOR EACH ROWset new.cityname=concat(new.cityname,'123')
;;
DELIMITER ;


注意:觸發本表操作的時候,可以不用新增自身表名的sql,直接操作表字段,避免產生迴圈觸發,會提示報錯。

3.定時任務event

用show variables like '%event_scheduler%'檢查是否開啟定時任務,如果沒有開啟,參考之前的blog進行開啟;

event_scheduler ON

示例如下:

CREATE EVENT `event_test`
ON SCHEDULE EVERY 1 MINUTE
ON COMPLETION NOT PRESERVE
ENABLE
DO
CALL PROC_TEST();

過程的註釋有三種:

1.用-- 注意:是‘--’加一個空格,單行註釋;

2.用#,不用加空格,單行註釋

3.用/**/,多行註釋