詳解MariaDB數據庫的觸發器

1.什麼是觸發器

觸發器是一種特殊的存儲過程,它在插入,刪除或修改特定表中的數據時觸發執行
它比數據庫自己標準的功能有更精細和更復雜的數據控制能力

2.觸發器的做用:

2.1 安全性

能夠基於數據庫的值使用戶具備操做數據庫的某種權利。
能夠基於時間限制用戶的操做,例如不容許下班後和節假日修改數據庫數據
能夠基於數據庫中的數據限制用戶的操做,例如不容許股票的價格的升幅一次超過10%

2.2 審計

能夠跟蹤用戶對數據庫的操做
審計用戶操做數據庫的語句
把用戶對數據庫的操做寫入審計表

2.3 實現複雜的數據完整性規則

實現非標準的數據完整性檢查和約束。觸發器可產生比規則更爲複雜的限制。與規則不一樣,觸發器能夠引用列或數據庫對象。
例如,觸發器可回退任何企圖吃進超過本身保證金的期貨。

2.4 實現複雜的非標準的數據庫相關完整性規則。

觸發器能夠對數據庫中相關的表進行連環更新。
例如,在auths表author_code列上的刪除觸發器可致使相應刪除在其它表中的與之匹配的行。
    觸發器可以拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務

2.5 實時同步地複製表中的數據

2.6 自動計算數據值

若是數據的值達到了必定的要求,則進行特定的處理。
例如,若是公司的賬號上的資金低於5萬元則當即給財務人員發送警告數據

3.建立觸發器:

語法: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)

4.查看觸發器:

4.1 查看建立過程

語法:安全

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)

4.2 查看觸發器詳細信息

語法: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)

5.刪除觸發器:

語法:教程

drop trigger 觸發器名稱;

例子:事件

MariaDB [book]> delimiter;

MariaDB [book]> drop trigger del_category;
Query OK, 0 rows affected (0.00 sec)

MariaDB [book]> delimiter;
相關文章
相關標籤/搜索