觸發器是一類特殊的事務,可以監視某種資料操作(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.說明 觸發器的定義就是說某個條件成立的時候,你觸發器裡面所定義的語句就會被自動的執行。因此觸發器不需要人為的去呼叫,也不能呼叫。然後,觸發器的觸發條件其實在你定義的時候就已經設定好的了。這裡面需要說明一下,觸發器可以分為語句級觸發器和行級觸發器。簡單的說就是語句級的觸發器可以在某些語句執行前或執...