首頁 > 資料庫 > mysql教程 > MySQL學習總結之觸發器詳解

MySQL學習總結之觸發器詳解

WBOY
發布: 2022-03-14 17:19:24
轉載
2546 人瀏覽過

這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於觸發器的相關問題,觸發器,就是⼀種特殊的存儲過程,觸發器和存儲過程⼀樣是⼀個能夠完成特定功能、存儲,希望對大家有幫助。

MySQL學習總結之觸發器詳解

推薦學習:mysql教學

#觸發器

一、觸發器的介紹

觸發器,就是⼀種特殊的預存程序。觸發器與預存程序⼀樣是⼀個能夠完成特定功能、儲存

在資料庫伺服器上的SQL⽚段,但是觸發器⽆需調⽤,當對資料表中的資料執⾏DML操作時

⾃動觸發這個SQL⽚段的執⾏,⽆需⼿動調⽤。

在MySQL,只有執⾏insert\delete\update操作才能觸發觸發器的執⾏。

二、觸發器使用

1.建立觸發器

create trigger tri_name   -- tri_name:触发器别名
<before|after> 						-- 定义触发时机
<insert|delete|update>		-- 定义DML类型
ON <table_name>						-- 要触发的表
for each <row|statement>							
-- for each row 声明为⾏级触发器(操作的每⼀条记录就触发触发器执⾏⼀次)
-- for each statement 声明语句级触发器(触发动作体执行一次)
begin											-- 当只有一句sql语句时,begin...end 可以省略	
	sql_statement 					-- 进行触发器对应的DML类型的操作
end;


#示例
-- 创建触发器:当学⽣信息表发⽣添加操作时,则向⽇志信息表中记录⼀条⽇志
create trigger tri_test1
after insert on students
for each row
insert into stulogs(time,log_text) values(now(), concat('添 加',NEW.stu_num,'学⽣信息'));
登入後複製

2.查看觸發器

#查看全部触发器
show triggers;

#查看触发器的创建语句
show create trigger 触发器名字;
登入後複製

3.刪除觸發器

觸發器不能修改,只能刪除

drop trigger  触发器名字;
登入後複製

三、 NEW與OLD

觸發器⽤於監聽對資料表中資料的insert、delete、update操作,在觸發器中通常處理

⼀些DML的關聯操作;我們可以使⽤ NEW 和OLD 關鍵字在觸發器中取得觸發這個觸發器

的DML操作的資料

  • #NEW : 在觸發器中⽤於取得insert操作所新增的資料、update操作修改後的記錄
  • #OLD:在觸發器中⽤於取得delete操作刪除前的資料、update操作修改前的資料

1.NEW的使用

#insert操作中:NEW表示添加的新记录
create trigger tri_test1
after insert on students
for each row
insert into stulogs(time,log_text) values(now(), concat('添 加',NEW.stu_num,'学⽣信息'));


#update操作中:NEW 表示修改后的数据
-- 创建触发器 : 在监听update操作的触发器中,可以使⽤NEW获取修改后的数据
create trigger tri_test2
after update on students for each row
insert into stulogs(time,log_text) values(now(), concat('修改学⽣信息
为:',NEW.stu_num,NEW.stu_name));
登入後複製

2.OLD的使用

#delete操作中:OLD表示删除的记录
create trigger tri_test3
after delete on students for each row
insert into stulogs(time,log_text) values(now(), concat('删 除',OLD.stu_num,'学⽣信息')); 


#update操作中:OLD表示修改前的记录
create trigger tri_test2
after update on students for each row
insert into stulogs(time,log_text) values(now(), concat('将学⽣姓名从
【',OLD.stu_name,'】修改为【',NEW.stu_name,'】'));
登入後複製

四、10.4 觸發器使⽤總結

1.優點

  • 觸發器是⾃動執⾏的,當對觸發器相關的表執⾏響應的DML操作時⽴即執⾏;
  • 觸發器可以實現表中的資料的級聯操作(關聯操作),有利於保證資料的完整性;
  • 觸發器可以對DML操作的資料進⾏更為複雜的合法性校驗

2.缺點

    ##使⽤觸發器實現的業務邏輯如果出現問題將難以定位,後期維護困難;
  • ⼤量使⽤觸發器容易導致程式碼結構雜亂,增加了程式的複雜性;
  • 當觸發器操作的資料量⽐較⼤時,執⾏效率會⼤⼤降低。
3.使⽤建議

在互聯⽹項⽬中,應避免適應觸發器;

對於並發量不⼤的項⽬可以選擇使⽤儲存過程,但是在互聯⽹引⽤中不提倡使⽤預存程序

(原因:預存程序時將實作業務的邏輯交給資料庫處理,⼀則增減了資料庫的負載,⼆則不利於資料庫的遷移)

推薦學習:

mysql學習教學

以上是MySQL學習總結之觸發器詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板