本篇文章給大家帶來了關于mysql的相關知識,其中主要介紹了關于觸發器的相關問題,觸發器,就是?種特殊的存儲過程,觸發器和存儲過程?樣是?個能夠完成特定功能、存儲,希望對大家有幫助。
推薦學習:mysql教程
觸發器
一、觸發器的介紹
觸發器,就是?種特殊的存儲過程。觸發器和存儲過程?樣是?個能夠完成特定功能、存儲
在數據庫服務器上的SQL?段,但是觸發器?需調?,當對數據表中的數據執?DML操作時
?動觸發這個SQL?段的執?,?需?動調?。
在MySQL,只有執?insertdeleteupdate操作才能觸發觸發器的執?。
二、 觸發器使用
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學習教程