推薦學習:
觸發器,就是⼀種特殊的儲存過程。觸發器和儲存過程⼀樣是⼀個能夠完成特定功能、儲存
在資料庫伺服器上的SQL⽚段,但是觸發器⽆需調⽤,當對資料表中的資料執⾏DML操作時
⾃動觸發這個SQL⽚段的執⾏,⽆需⼿動調⽤。
在MySQL,只有執⾏insert\delete\update操作才能觸發觸發器的執⾏。
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,'學⽣資訊'));
#檢視全部觸發器 show triggers; #檢視觸發器的建立語句 show create trigger 觸發器名字;
觸發器不能修改,只能刪除
drop trigger 觸發器名字;
觸發器⽤於監聽對資料表中資料的insert、delete、update操作,在觸發器中通常處理
⼀些DML的關聯操作;我們可以使⽤ NEW 和 OLD 關鍵字在觸發器中獲取觸發這個觸發器
的DML操作的資料
#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));
#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,'】'));
在互聯⽹項⽬中,應避免適應觸發器;
對於並行量不⼤的項⽬可以選擇使⽤儲存過程,但是在互聯⽹引⽤中不提倡使⽤儲存過程
(原因:儲存過程時將實現業務的邏輯交給資料庫處理,⼀則增減了資料庫的負載,⼆則不利於資料庫的遷移)
推薦學習:
以上就是MySQL學習總結之觸發器詳解的詳細內容,更多請關注TW511.COM其它相關文章!