MySQL基礎 觸發器

2021-09-18 02:28:07 字數 2525 閱讀 3912

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