MySQL 觸發器的使用

2021-08-07 15:08:02 字數 2129 閱讀 1068

mysql 觸發器trigger

觸發器:

監視某種情況並且觸發某種操作

觸發器建立語法的四要素:

1. 監視地點 table

2. 監視事件 insert/update/delete

3. 觸發時間 after/before

4. 觸發事件 insert/update/delete

語法:

create

trigger triggername

after/before

insert/update/delete

on 表名

foreach

row #這句話在mysql是固定的

begin

sql語句;

end;

例子:

資料準備

#商品表

create

table g(

id int

primary

key auto_increment,

name varchar(20),

num int

);#訂單表

create

table o(

oid int

primary

key auto_increment,

gid int,

much int

);insert

into g(name,num) values('商品1',10),('商品2',10),('商品3',10);

如果我們在沒使用觸發器之前:假設我們現在賣了3個商品1,我們需要做兩件事

1.往訂單表插入一條記錄

insert into o(gid,much) values(1,3);

2.更新商品表商品1的剩餘數量

update g set num=num-3 where id=1;

建立乙個觸發器

create

trigger tg1

after

insert

on o

foreach

rowbegin

update g set num=num-new.much where id=new.gid;(注意此處和第乙個觸發器的不同)

end$

這樣當往訂單表中插入資料時就會自動更新商品表的資料

另外兩種情況

當使用者撤銷乙個訂單的時候,訂單表直接刪除乙個記錄,商品表的數量要還原

create

trigger tg2

after

delete

on o

foreach

rowbegin

update g set num = num + old.much where id = old.gid;

end

修改訂單表中記錄的數量時也要相應的修改商品表中的剩餘數量

create

trigger tg3

after

update

on o

foreach

rowbegin

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

end

現在還可能存在乙個問題,就是當訂單中插入的數量大於商品剩餘數量,那麼商品剩餘數量更新出來的結果就是負數,解決方法就是在訂單表插入資料之前進行判斷,判斷要插入的數量是否大於商品的剩餘數量

create trigger tg4

before insert on o

foreach row

begin

set @num = (select num from g where id = new.gid);

ifnew.much > @num then

setnew.much = @num;

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

end

積分觸發器 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...