MySQL深入淺出掌握觸發器用法

MySQL觸發器

觸發器是一種特殊的存儲過程,觸發器和存儲過程一樣是一個能完成特定功能、存儲在數據庫服務器上的SQL片段,但是觸發器無需調用,當對數據庫表中的數據執行DML操作時自動觸發這個SQL片段的執行,無需手動調用.

在MySQL中,隻要執行insert,update,delete操作是才能觸發觸發器的執行

觸發器的這種特性可以協助應用在數據庫端確保數據的完整性,日志記錄,數據校驗等操作.

使用別名OLD和NEW來引用觸發器中發生變化的記錄內容,這與其他的數據庫是相似的,現在觸發器還值支持行級觸發,不支持語句級觸發.

觸發器的特性

① 什麼條件會觸發: insert,delete,update

② 什麼時候觸發: 在增刪改前或者後

③ 觸發頻率: 針對每一行執行

④ 觸發器定義在表上,附著在表上

創建觸發器

— 創建隻有一個執行語句的觸發器
格式:
    create trigger 觸發器名 before|after 觸發事件
    on 表名 for each row
    執行語句;

— 創建有多個執行語句的觸發器
格式:
    create trigger 觸發器名 before|after 觸發事件
    on 表名 for each row
    begin
        執行語句列表
    end;

demo

— 需求:當user表添加一行數據,則會自動在user_log添加日志記錄

delimiter $$
create trigger trigger_test after insert
on user for each row
begin
    insert into user_logs values(1,now,'有新用戶增加');
end $$
delimiter;

觸發器操作-NEW和OLD

mysql中定義瞭new和old,用來表示觸發器的所在表中,觸發瞭觸發器的哪一行數據,來引用觸發器中發生變化的記錄內容,具體如下

觸發器類型 觸發器類型NEW和OLD的使用
INSERT 型觸發器 NEW 表示將要或者已經新增的數據
UPDATE 型觸發器 OLD 表示修改之前的數據,NEW表示將要或者已經修改後的數據
DELETE 型觸發器 OLD 表示將要或者已經刪除的數據

使用方法: NEW.columnName(columnName為相應數據表某一列名)

demo

-- insert
	delimiter &&
	create trigger test1 after  insert
	on user for each row
	begin
		insert into user_logs values(1,now,concat('有新用戶增加,信息為',NEW.uid,NEW.username,NEW.password));
	end $$
	delimiter;
-- update
delimiter &&
	create trigger test2 after update
	on user for each row
	begin
		insert into user_logs values(1,now,concat('修改用戶,之前信息為',OLD.uid,OLD.username,OLD.password,'修改之後的信息為',NEW.uid,NEW.username,NEW.password));
	end $$
	delimiter;
-- delete
delimiter &&
	create trigger test3 after delete
	on user for each row
	begin
		insert into user_logs values(1,now,concat('有用戶刪除,信息為',OLD.uid,OLD.username,OLD.password));
	end $$
	delimiter;

觸發器-查看

show triggers;

觸發器-刪除

drop trigger if exists trigger_test;

觸發器的註意事項

① MYSQL中觸發器中不能對本表進行insert,update,delete操作,以免遞歸循環觸發

② 盡量少使用觸發器,假設觸發器觸發每次執行1s,insert table 500條數據,那麼就需要觸發500次觸發器,光是觸發器執行的時間就要花費500s,而insert 500條數據一共是1s,那麼insert的效率就非常的低瞭.

③ 觸發器是針對每一行的,對增刪改非常頻繁的表上切記不要使用觸發器,因為他會非常消耗資源.

到此這篇關於MySQL深入淺出掌握觸發器用法的文章就介紹到這瞭,更多相關MySQL觸發器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: