MYSQL-----觸發器

觸發器

觸發器是由 INSERT,UPSET,DELETE等事件來觸發某種特定操作。
滿足觸發器的觸發條件時,數據庫系統就會執行觸發器中定義的程序語句。這樣可以保證操作的一致性。
example: 當學生表中新增了一個學生的信息時,學生人數的總數也應該增加,因此我們可以在這裏設置一個觸發器,當增加一個記錄時,執行一次計算人數的操作.

創建觸發器

1)創建只有一個執行語句的觸發器
create trigger 觸發器名 before|after 觸發事件 on 表名 for each row 執行語句;
eg:
創建一個由Insert操作觸發的觸發器。
create trigger trig_name before insert on trig_time for each row insert into trig_time values(now();
在向trig_name表中執行insert操作時,數據庫系統都會在insert之前向數據庫的trig_time表中插入當前時間。

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

不同的執行語句之間用分號隔開。但mysql默認情況下是以分號作爲結束執行語句的,爲了解決這個問題,我們引入delimiter.
delimiter &&可以將結束符變爲 &&,在創建完觸發器之後,我們可以可以用命令delimiter ;將結束符變爲分號。

eg:
delimiter &&
create trigger trig2 after insert on trig_table
for each row
begin
insert into trig_time values(‘13:36:00’);
insert into trig_time values(‘14:36:00’);
end&&
delimiter ;

在向trig_name表中執行insert操作時,數據庫系統都會在insert之後向數據庫的trig_time表中插入兩次當前時間。
從這個例子可以看出,觸發器可以同時執行多條執行語句。
MYSQL中一個表在相同觸發時間的相同觸發事件,只能創建一個觸發器。

查看觸發器

1)show triggers\G;
show triggers無法查詢指定的觸發器,顯示的是所有觸發器的信息。
如果觸發器很多時,不方便找到所需觸發器的信息。當觸發器較少時,可以使用show triggers語句。

2)在triggers中查看觸發器信息。

a)查看triggers表中的所有信息。
select * from information_schema.triggers;

b)查看triggers表中的指定的觸發器信息。
select * from information_schema.triggers where trigger_name=’觸發器名’;

觸發器的使用

在MYSQl中觸發器的執行順序是before觸發器,表操作(insert,delete,upset)和after觸發器。

在激活觸發器時,對觸發器的執行語句有一定的限制。例如觸發器中不能包括:start tranction,commit,rollback等關鍵詞,也不能包含call語句

在觸發器的執行過程中,任何步驟出錯都會阻止程序向下運行。對於普通表來說,已經被更新過表不能再回滾,更新後的數據繼續保持在表中。因此我們在設計觸發器的時候應該認真考慮。

刪除觸發器

drop trigger 觸發器名;

如果只指定觸發器名稱,那麼就會在當前數據庫下尋找該觸發器進行刪除。
如果同時指定了數據庫名稱,那麼就會到指定的數據庫下去尋找該觸發器刪除。drop trigger 數據庫名.觸發器名。
當我們不需要某些觸發器時,應及時刪除,否則有時執行語句會造成數據的變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章