首頁 > 軟體

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

2022-05-17 13:02:25

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觸發器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com