mysql觸發器與存儲過程

一、異同點

       觸發器和存儲過程都是一組mysql語句集,都可以實現一些比較複雜的業務邏輯,可以直接在數據庫中,編寫業務邏輯,對不同的表進行操作,執行效率較高,不同的是存儲過程需要主動調用,如下:

#給參數賦值
set @b=5;
#調用存儲過程,並傳入參數
call proc_adder(2,@b,@s);
#獲取結果
select @s as sum;
而觸發器,的執行是在,我們對數據庫進行操作時主動調用的,對b表執行插入操作之前,調用觸發器如下:
create trigger a after insert  on  b 


二、缺點

      雖然觸發器和存儲過程可以加強代碼的執行效率,但是把過多的業務邏輯存儲於數據庫中,不利於系統的運維管理,容易造成業務混亂,不利於系統的分成管理。

      不同的數據庫下,語法差異較大,不利於數據庫移植,移植工作量大。

三、存儲過程

     1、簡單創建存儲過程



    2、創建代碼如下

use cpyx;
#判斷如果存在刪除該觸發器
DROP PROCEDURE IF EXISTS `proc_while`;
#觸發器開始
DELIMITER ;;
#創建觸發器,定義輸入 輸出,IN n int、OUT m int
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)
#開始邏輯編碼
BEGIN
#定義變量 i s爲int型
declare i int;
declare s int;
#初始化賦值
set i=1;
set s=0;
#while循環,判斷臨界條件
while i<=n do
#求和
set s=s+i;
set i=i+1;
#結束循環
end while;
#查詢返回最終結果
select s;
#結束觸發器
END;;
DELIMITER ;

3、查詢與執行

use cpyx;
Show procedure status;

use cpyx;

CALL  proc_while(5)

三、觸發器

 1、觸發器的創建


2、詳細代碼如下


#價格追蹤存儲過程(某件商品對於某個客戶的價格改變後,自動更新新的價格到追蹤表,供下次下單使用)
use tlb_trade;
#如果已經存在該觸發器則刪除
DROP trigger IF EXISTS price_track_insert;
#創建開始
DELIMITER $
#更新訂單清單表之後,創建價格追蹤的觸發器
create trigger price_track_insert after update  on  order_goods 
#每條記錄都執行該操作
for each row
#開始業務
begin
#定義四個變量
declare a int;
declare b int;
declare c int;
declare d int;
#獲取訂單狀態
set b = (select AUDITSTATUS from place_order where ID=new.ORDERID);
#判斷清單狀態
if new.SALEFUNCTION=1 then 
#獲取訂單的業務員和客戶id
set a = (select PERSONID from order_ref_person where ID=new.ORDERID);
set c = (select CUSTOMERID from order_ref_customer where ID=new.ORDERID);
set d=(select count(*) from price_track where CUSTOMERID=c and GOODSID=new.GOODSID);
#判斷價格追蹤是否存在,不存在新增記錄,存在則更新記錄
if d=0 then 
 insert into price_track(PERSONID,CUSTOMERID,GOODSID,CREATETIME,PRICE) values(a,c,new.GOODSID,now(),new.price);
else
update price_track set price_track.PRICE=new.price where CUSTOMERID=c and GOODSID=new.GOODSID;
#結束觸發器
end if;
end if;
end$
DELIMITER ;

1、詳細觸發器說明

https://www.cnblogs.com/wangprince2017/p/7827091.html

2、詳細存儲過程說明

http://blog.csdn.net/a__yes/article/details/52795793

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章