mysql觸發器與儲存過程

2021-08-16 03:08:05 字數 2576 閱讀 1911

一、異同點

觸發器和儲存過程都是一組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、詳細觸發器說明

2、詳細儲存過程說明

MySQL 事件 觸發器 儲存過程

事件 檢視事件狀態 show variables like event scheduler 開啟事件 set global event scheduler on 觸發器語法 建立觸發器 delimiter 定義開始和結束的標誌 create trigger triggername after bef...

mysql觸發器和儲存過程

mysql觸發器感覺比較使用,比如新增a表就要同時新增b表,或者刪除a表的同時也要刪除b表 觸發器還設計到old和new的使用 delimiter create trigger mytrigger2 after insert on t user for each row begin insert i...

MYSQL函式 儲存過程 觸發器

自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區別 可以使用 create function 語句建立自定義函式。語法格式如下 create funct...