MySql-觸發器

糖炒栗子不要糖發表於2020-09-29

觸發器的概念

觸發器(trigger)是MySQL提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作(insert,delete, update)時就會啟用它執行

觸發器的基本語法

CREATE TRIGGER trigger_name 
trigger_time 
trigger_event ON tbl_name 
FOR EACH ROW 
trigger_stmt

trigger_name ——觸發器的名稱
trigger_time ——觸發時機(before、after)
trigger_event ——觸發事件(insert、update、delete)
tbl_name ——需要建立觸發器的表名
trigger_stmt ——語句體

before和after的區別

before代表觸發器裡面的命令在DML修改資料之前執行,after代表觸發器裡面的命令在DML修改資料之後執行。
!!注意,對同一個表相同觸發時間的相同觸發事件,只能定義一個觸發器;可以使用old和new來引用觸發器中發生變化的記錄內容
new:新增一條語句的新增物件;
old:刪除一條語句的刪除物件;

建立觸發器例項

單一語句的觸發器

after
create TRIGGER tig_test1
after insert on student
for each row
insert into student_copy1 VALUES(new.s_id,new.name,new.gender,new.class)

場景:每次向student表中插入一條資料之後,就向student_copy1表中更新這條資料
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

before

場景:刪除student表中的一條記錄,同時在student_copy1中備份這條刪除的記錄

create TRIGGER tig_test2
before delete on student
for each row
insert into student_copy1 VALUES(old.s_id,old.name,old.gender,old.class);

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

包含多條語句的觸發器

create trigger tir_name
before|after insert|delete|update on table_name
for each row
begin
....
end

場景:刪除學生表中一條資料並同時刪除成績表中關於該學生的考試成績

create trigger tirg_test3
after insert on score
for each row
begin
delete from student where s_id='1010';
DELETE from score where s_id ='1010';
END

相關文章