MYSQL5.6建立儲存過程和觸發器
阿新 • • 發佈:2019-02-14
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.用/**/,多行註釋