溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL觸發(fā)器然后使用

發(fā)布時間:2022-03-15 15:58:07 來源:億速云 閱讀:371 作者:iii 欄目:MySQL數(shù)據(jù)庫

這篇“MySQL觸發(fā)器然后使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL觸發(fā)器然后使用”文章吧。

MySQL觸發(fā)器然后使用

觸發(fā)器

一、觸發(fā)器的介紹

觸發(fā)器,就是?種特殊的存儲過程。觸發(fā)器和存儲過程?樣是?個能夠完成特定功能、存儲

在數(shù)據(jù)庫服務(wù)器上的SQL?段,但是觸發(fā)器?需調(diào)?,當(dāng)對數(shù)據(jù)表中的數(shù)據(jù)執(zhí)?DML操作時

?動觸發(fā)這個SQL?段的執(zhí)?,?需?動調(diào)?。

在MySQL,只有執(zhí)?insert\delete\update操作才能觸發(fā)觸發(fā)器的執(zhí)?。

二、 觸發(fā)器使用

1.創(chuàng)建觸發(fā)器
create trigger tri_name   -- tri_name:觸發(fā)器別名
<before|after> 						-- 定義觸發(fā)時機(jī)
<insert|delete|update>		-- 定義DML類型
ON <table_name>						-- 要觸發(fā)的表
for each <row|statement>							
-- for each row 聲明為?級觸發(fā)器(操作的每?條記錄就觸發(fā)觸發(fā)器執(zhí)??次)
-- for each statement 聲明語句級觸發(fā)器(觸發(fā)動作體執(zhí)行一次)
begin											-- 當(dāng)只有一句sql語句時,begin...end 可以省略	
	sql_statement 					-- 進(jìn)行觸發(fā)器對應(yīng)的DML類型的操作
end;


#示例
-- 創(chuàng)建觸發(fā)器:當(dāng)學(xué)?信息表發(fā)?添加操作時,則向?志信息表中記錄?條?志
create trigger tri_test1
after insert on students
for each row
insert into stulogs(time,log_text) values(now(), concat('添 加',NEW.stu_num,'學(xué)?信息'));
2.查看觸發(fā)器
#查看全部觸發(fā)器
show triggers;

#查看觸發(fā)器的創(chuàng)建語句
show create trigger 觸發(fā)器名字;
3.刪除觸發(fā)器

觸發(fā)器不能修改,只能刪除

drop trigger  觸發(fā)器名字;

三、 NEW與OLD

觸發(fā)器?于監(jiān)聽對數(shù)據(jù)表中數(shù)據(jù)的insert、delete、update操作,在觸發(fā)器中通常處理

?些DML的關(guān)聯(lián)操作;我們可以使? NEW 和 OLD 關(guān)鍵字在觸發(fā)器中獲取觸發(fā)這個觸發(fā)器

的DML操作的數(shù)據(jù)

  • NEW : 在觸發(fā)器中?于獲取insert操作添加的數(shù)據(jù)、update操作修改后的記錄

  • OLD:在觸發(fā)器中?于獲取delete操作刪除前的數(shù)據(jù)、update操作修改前的數(shù)據(jù)

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,'學(xué)?信息'));


#update操作中:NEW 表示修改后的數(shù)據(jù)
-- 創(chuàng)建觸發(fā)器 : 在監(jiān)聽update操作的觸發(fā)器中,可以使?NEW獲取修改后的數(shù)據(jù)
create trigger tri_test2
after update on students for each row
insert into stulogs(time,log_text) values(now(), concat('修改學(xué)?信息
為:',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,'學(xué)?信息')); 


#update操作中:OLD表示修改前的記錄
create trigger tri_test2
after update on students for each row
insert into stulogs(time,log_text) values(now(), concat('將學(xué)?姓名從
【',OLD.stu_name,'】修改為【',NEW.stu_name,'】'));

四、10.4 觸發(fā)器使?總結(jié)

1.優(yōu)點
  • 觸發(fā)器是?動執(zhí)?的,當(dāng)對觸發(fā)器相關(guān)的表執(zhí)?響應(yīng)的DML操作時?即執(zhí)?;

  • 觸發(fā)器可以實現(xiàn)表中的數(shù)據(jù)的級聯(lián)操作(關(guān)聯(lián)操作),有利于保證數(shù)據(jù)的完整性;

  • 觸發(fā)器可以對DML操作的數(shù)據(jù)進(jìn)?更為復(fù)雜的合法性校驗

2.缺點
  • 使?觸發(fā)器實現(xiàn)的業(yè)務(wù)邏輯如果出現(xiàn)問題將難以定位,后期維護(hù)困難;

  • ?量使?觸發(fā)器容易導(dǎo)致代碼結(jié)構(gòu)雜亂,增加了程序的復(fù)雜性;

  • 當(dāng)觸發(fā)器操作的數(shù)據(jù)量?較?時,執(zhí)?效率會??降低。

3.使?建議

在互聯(lián)?項?中,應(yīng)避免適應(yīng)觸發(fā)器;

對于并發(fā)量不?的項?可以選擇使?存儲過程,但是在互聯(lián)?引?中不提倡使?存儲過程

(原因:存儲過程時將實現(xiàn)業(yè)務(wù)的邏輯交給數(shù)據(jù)庫處理,?則增減了數(shù)據(jù)庫的負(fù)載,?則不利于數(shù)據(jù)庫的遷移)

以上就是關(guān)于“MySQL觸發(fā)器然后使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI