觸發器(trigger):監視某種情況,並觸發某種操作,它的執行是由事件來觸發的,例如當對乙個表進行操作( insert,delete, update)時就會啟用它執行。
觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器建立語法四要素:
1.監視地點(table)
2.監視事件(insert/update/delete)
3.觸發時間(after/before)
4.觸發事件(insert/update/delete)
觸發器基本語法
create trigger trigger_name trigger_time trigger_event on tb_name for each row trigger_stmt;
trigger_time :觸發器的觸發事件,可以為before(在檢查約束前觸發)
或after(在檢查約束後觸發);
trigger_event:是觸發器的觸發事件,包括insert、update和delete;
tb_name: 表示建立觸發器的表名,就是在哪張表上建立觸發器
trigger_stmt: 觸發器的程式體,可以是一條sql語句或者是用begin和end包含的多條語句;
for each row:表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器。
刪除觸發器:
drop trigger 觸發器名稱。
有兩張**分別為 商品表 和訂單表
– 建立商品表
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(『蘋果』,10),(『香蕉』,10),(『桔子』,10);
– 1.往訂單表插入一條記錄
– insert into o(gid,much) values(1,3);
– 2.更新商品表商品1的剩餘數量
– update g set num=num-3 where id=1;
– 建立觸發器
– 修改結束符
delimiter $
create trigger tg1 after insert on o for each row
begin
update g set num = num-3 where id = 1;
end $
delimiter ;
insert into o(gid,much) values(1,3);
注: 會發現蘋果的數量變為7了,說明在我們插入一條訂單的時候,觸發器自動幫我們做了更新操作。
產生的問題:
不管我們買哪個商品,最終更新的都是商品1的數量。
insert into o(gid,much) values(2,2);
new 和old 的使用:
new.columnname:新增行的某列資料
old.columnname:刪除行的某列資料
delimiter $
create trigger tg2 after insert on o for each row
begin
update g set num = num-new.much where id = new.gid;
end $
delimiter ;
insert into o(gid,much) values(2,3);
drop trigger tg2;
當使用者撤銷乙個訂單的時候,直接刪除乙個訂單,對應的商品數量再加回去
delimiter $
create trigger tg3 after delete on o for each row
begin
update g set num=num+old.much where id = old.gid;
end $
delimiter ;
drop trigger tg3;#不要疑惑因為同乙個表中不能有多個觸發器,所以在使用這個觸發器的時候先刪除上乙個觸發器不然會報錯
delete from o where oid = 3;
擴充套件: before 和after 的區別:
after是先完成資料的增刪改,再觸發,觸發的語句晚於監視的增刪改操作,無法影響前面的增刪改動作;也就是說先插入訂單記錄,再更新商品的數量;
before是先完成觸發,再增刪改,觸發的語句先於監視的增刪改,我們就有機會判斷,修改即將發生的操作;
mysql 觸發器基礎
mysql的觸發器 一般用在需要有資料統計的時候,如果每次請求都要對一張表的資料進行統計,可以考慮觸發器,如 乙個公司的 雇員資訊表中,有使用者名稱 和 使用者的工資字段,現在需要在前端頁面上展示,總的雇員數,和總的工資數,如果每請求一次都要去使用 mysql的聚合函式 sum 和 count 其實...
mysql 基礎 觸發器
簡單的說,就是一張表發生了某件事 插入 刪除 更新操作 然後自動觸發了預先編寫好的若干條sql語句的執行 特點 觸發事件的操作和觸發器裡的sql語句是乙個事務操作,具有原子性,要麼全部執行,要麼都不執行 作用 保證資料的完整性,起到約束的作用 觸發器是隱藏到mysql後台執行的功能。由於觸發器是隱藏...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...