mysql觸發器的學習以及使用

2021-08-04 02:55:04 字數 2107 閱讀 8601

觸發器:trigger

監控某資料操作(insert/update/delete)並觸發相應的操作(insert/update/delete)

觸發器幾個概念

監視地點table

監視事件insert/update/delete

觸發時間after/before

觸發事件insert/update/delete

例子: 商品表goods,訂單表goodsorder

表結構如下

goods

idname(商品名)num(數量)

goodsorder

idgid(商品id)much(數量)

當下乙個訂單時,對應的商品數量相應減少

分析:監視地點: goodsorder

監視事件:insert

觸發事件:update

先修改下結束符 delimiter $

create trigger trigger1

after

insert

on goodsorder

for each row

began

update goods set num=num-1 where id=1; (進行sql語句)

end$

這裡怎麼傳值呢?

所以要引入行變數的概念

引數傳值

分析:我們監視的是goodsorder表的insert語句,那麼insert語句產生的資料能否在觸發器中引用呢?

使用new/old表示表名

操作行為 表名表示方式

insert 語句中 新產生的            new

delete語句中 刪除的old

update語句中 修改前old

修改後 new

例:刪除訂單表中的訂單,使之商品表的數量自動更新

修改上述中的觸發器

delimiter $

create trigger trigger2

after insert on goodsorder

for each row

begin

update goods set num=num-new.much where id=new.gid;

end$

例如:修改訂單表中的資料,使之商品表中的數量自動更新

create trigger trigger3

before update on goodsorder

for each row

begin

update goods set num = num - old.much + new.much where id=old.gid;

end$

在上面兩個觸發器中可以看到有before/after ,這就是在檢測點之前還是檢測點滯後進行觸發

宣告變數

declare 

變數名 型別;

賦值    into 變數名

例子:假如目前a物品剩餘2件,但是一使用者購買了5件,怎麼防止爆倉

思路:先查詢商品倉庫數量有沒有大於購買數量

若 大於 購買數量=商品倉庫裡數量

否則正常購買

create trigger trigger4

after insert on goodsorder

for each row

begin

declare rnum int;

select num into rnum from goods where id=new.gid;

if rnum

若使用after 則會報錯       error 1362 (hy000): updating of new row is not allowed in after trigger

這就是說只有在觸發器之前才能進行變數操作

所以要把after換成before

for each row 是行級觸發器,影響多少行觸發多少次

不加此句則為語句級觸發器,只觸發一次

oracle 支援行級和語句級觸發器

mysql 只支援行級能觸發器

積分觸發器 mysql 觸發器的使用

將多個資料庫中的某列資料同步時需要用到mysql觸發器,以下可做參考,已簡單測試ok.修改紅棗的積分時觸發 drop trigger if exists u hongzaocount delimiter create trigger u hongzaocount after update on ho...

mysql 觸發器 觸發器使用

1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...