Mysql學習 觸發器

2021-07-11 22:07:07 字數 2509 閱讀 4309

觸發器是一類特殊的事務,可以監視某種資料操作(insert/delete/update),並觸發相應操作(insert/delete/update)。

使用場景:

1、當向一張表中新增或刪除記錄時,需要在相關表中進行同步操作

2、當表上某列資料的值與其他表中的資料有聯絡時。

3、當需要對某張表進行跟蹤時

二、觸發器建立語法 —— 4要素

1、監視地點  table

2、監視事件  insert/update/delete

3、觸發時間 after/before

4、觸發事件 insert/update/delete

建立觸發器的語法:

create trigger 觸發器名稱 

after/before (觸發時間)

insert/update/delete (監視事件)

on 表名 (監視位址)

for each row

begin

sql1;

..sqln;

end;

設定mysql 最外層分割符  delimiter  $

檢視已有觸發器: show triggers

刪除已有觸發器:drop trigger  觸發器名稱

例子:通過監視訂單表的新增訂單,減少商品表中對應商品的庫存

商品表:

create table `good` (

`gid` int(11) not null,

`name` varchar(10) not null,

`num` smallint(6) default null,

primary key (`gid`)

) engine=innodb default charset=utf8;

訂單表:

create table `ord` (

`gid` int(11) default null,

`orderid` int(11) default null,

`much` smallint(6) default null

) engine=innodb default charset=utf8;

建立***:

new  對應新行   old  對應舊行

delimiter  $

create trigger good_num_trigger

after

insert

on ord

for each row

begin

update good set num = num - new.much where gid = new.gid;

end$

create trigger good_add_num

after

delete

on ord

for each row

begin

update good set num = num+old.much where gid =old.gid;

end$

delimiter  ;

建立***:在訂單訂購數量改變時,更新商品庫存表中的庫存 new  對應新行   old  對應舊行

delimiter  $

create trigger ord_update_much

before

update

on ord

for each row

begin

update good set num = num

+old.much -new.much where gid =new.gid;

end$

delimiter  

;建立***:判斷插入的訂單的much  是否大於訂購商品的庫存,如果大於庫存,則調整該訂單的訂購數量為當前商品庫存

delimiter  $

create trigger ord_check_much

before

insert

on ord

for each row

begin

declare 

rnum int;

select num into rnum from good where gid = new.gid;

if new.much > rnum then

set new.much = rnum;

end if;

update good set num = num

-new.much where gid = new.gid;

end$

delimiter  ;

注意:for each row 在mysql 中的***必須有,在其他資料庫中比如oracle中的***是可以缺失的

1、如果有 for each row ,則是行級***

執行的語句操作了n行資料,則該***被呼叫n次。

2、如果沒有for each row,則是語句級***

按照監聽到的語句數量,呼叫***

觸發器 mysql觸發器

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

mysql 觸發器學習

mysql 觸發器學習 1.乙個簡單的例子 1.1.建立表 create table t s1 integer 1.2.觸發器 delimiter create trigger t trigger before insert on t for each row begin set x hello t...

mysql觸發器 學習

1.說明 觸發器的定義就是說某個條件成立的時候,你觸發器裡面所定義的語句就會被自動的執行。因此觸發器不需要人為的去呼叫,也不能呼叫。然後,觸發器的觸發條件其實在你定義的時候就已經設定好的了。這裡面需要說明一下,觸發器可以分為語句級觸發器和行級觸發器。簡單的說就是語句級的觸發器可以在某些語句執行前或執...