觸發器是一種特殊的存儲過程,它在插入,刪除或修改特定表中的數據時觸發執行 它比數據庫自己標準的功能有更精細和更復雜的數據控制能力
能夠基於數據庫的值使用戶具備操做數據庫的某種權利。 能夠基於時間限制用戶的操做,例如不容許下班後和節假日修改數據庫數據 能夠基於數據庫中的數據限制用戶的操做,例如不容許股票的價格的升幅一次超過10%
能夠跟蹤用戶對數據庫的操做 審計用戶操做數據庫的語句 把用戶對數據庫的操做寫入審計表
實現非標準的數據完整性檢查和約束。觸發器可產生比規則更爲複雜的限制。與規則不一樣,觸發器能夠引用列或數據庫對象。 例如,觸發器可回退任何企圖吃進超過本身保證金的期貨。
觸發器能夠對數據庫中相關的表進行連環更新。 例如,在auths表author_code列上的刪除觸發器可致使相應刪除在其它表中的與之匹配的行。 觸發器可以拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務
若是數據的值達到了必定的要求,則進行特定的處理。 例如,若是公司的賬號上的資金低於5萬元則當即給財務人員發送警告數據
語法:mysql
create trigger 觸發器名稱 觸發的時機 觸發的動做 on 表名 for each row 觸發器狀態。
參數說明:sql
觸發器名稱: 本身定義 觸發的時機: before /after表示在執行動做以前仍是以後觸發操做 觸發的動做 :指的激發觸發程序的語句類型<insert ,update,delete> 觸發器建立語法四要素: 1.監視地點(table) 2.監視事件(insert/update/delete) 3.觸發時間(after/before)
例子:當category表中,刪除一個bTypeid=3的圖書分類時,books表中也要刪除對應分類的圖書信息數據庫
mysql> use book; 在category執行刪除前,查看bTypeId=3的圖書分類: mysql> select bName,bTypeId from books where bTypeId=3; 建立觸發 mysql> delimiter // mysql> create trigger delCategory after delete on category for each row -> delete from books where bTypeId=3; -> // 刪除bTypeId=3的記錄 mysql> delete from category where bTypeId=3; 查看:是否還有bTypeId=3的圖書記錄。能夠看出已經刪除。 MariaDB [book]> select bName,bTypeId from books where bTypeId=3; # 查詢books表中bTypeId爲3的記錄 +--------------------------------------+---------+ | bName | bTypeId | +--------------------------------------+---------+ | 3D MAX 3.0 創做效果百例 | 3 | | 3DS MAX 4橫空出世 | 3 | | 3D MAX R3動畫製做與培訓教程 | 3 | | 3D Studio Max 3綜合使用 | 3 | +--------------------------------------+---------+ 4 rows in set (0.00 sec) MariaDB [book]> delimiter // MariaDB [book]> create trigger del_category after delete on category for each row # 建立觸發器,當從category中刪除記錄中觸發 -> delete from books where bTypeId=3; # 觸發後的操做:從books表中刪除bTypeId爲3的記錄 -> // Query OK, 0 rows affected (0.02 sec) MariaDB [book]> delete from category where bTypeId = 3// # 在category表中刪除bTypeId爲3的記錄 Query OK, 1 row affected (0.01 sec) MariaDB [book]> select * from category where bTypeId =3// # 查詢category表中bTypeId爲3的記錄 Empty set (0.01 sec) MariaDB [book]> select * from books where bTypeId =3// # 查詢books表中bTypeId爲3的記錄 Empty set (0.00 sec)
語法:安全
show create trigger 觸發器名字\G
例子:動畫
MariaDB [book]> show create trigger del_category\G # 查看前面建立的觸發器del_category *************************** 1. row *************************** Trigger: del_category sql_mode: SQL Original Statement: CREATE DEFINER=`root`@`localhost` trigger del_category after delete on category for each row delete from books where bTypeId=3 character_set_client: utf8 collation_connection: utf8_unicode_ci Database Collation: utf8_general_ci 1 row in set (0.00 sec)
語法:code
show triggers\G # 查看全部的觸發器
例子:對象
MariaDB [book]> show triggers \G *************************** 1. row *************************** Trigger: del_category Event: DELETE Table: category Statement: delete from books where bTypeId=3 Timing: AFTER Created: NULL sql_mode: Definer: root@localhost character_set_client: utf8 collation_connection: utf8_unicode_ci Database Collation: utf8_general_ci 1 row in set (0.00 sec)
語法:教程
drop trigger 觸發器名稱;
例子:事件
MariaDB [book]> delimiter; MariaDB [book]> drop trigger del_category; Query OK, 0 rows affected (0.00 sec) MariaDB [book]> delimiter;