1. 程式人生 > >【Mysql】trigger觸發器(一些例項)

【Mysql】trigger觸發器(一些例項)

簡述

搞這個,主要是因為在網上根本沒找到mysql在這方面的太多資料。
所以,自己搞個筆記。

立個flag,如果遇到,或者試出來什麼比較好用的trigger的操作。就過來這個存起來

文章目錄

建立

  • 建立一個觸發器,會把插入的資料的sno資料給存起來。
  • 由於要用到;,所以,這裡需要先設定一下delimiter
mysql> delimiter //
mysql>
create trigger TR_SC_IN_SNO before insert on sc -> for each row -> begin -> set @a = new.sno; -> end -> // Query OK, 0 rows affected (0.07 sec)

不滿足條件就不修改或更新

mysql> delimiter //
mysql> create trigger TR_SC_IN_SNO
    -> before update
    -> on sc
    -> for each row
    -> begin
    -> if ((select count(*) from student where student.sno = new.sno) = 0) then
    ->    SIGNAL sqlstate '45001'
set message_text = "No way! You cannot do this!"; -> end if; -> end//

同樣的名稱不能有不同的操作

刪除

  • 刪除TR_SC_IN_SNO 這個觸發器
mysql> drop trigger TR_SC_IN_SNO ;
Query OK, 0 rows affected (0.10 sec)

檢視

  • 檢視所有的觸發器
mysql> show triggers;
+--------------+--------+-------+-------------------------------+--------+------------------------+--------------------------------------------+----------------+----------------------+----------------------+--------------------+
| Trigger      | Event  | Table | Statement                     | Timing | Created                | sql_mode                                   | Definer        | character_set_client | collation_connection | Database Collation |
+--------------+--------+-------+-------------------------------+--------+------------------------+--------------------------------------------+----------------+----------------------+----------------------+--------------------+
| TR_SC_IN_SNO | INSERT | sc    | begin
  set @a = new.sno;
end | BEFORE | 2018-11-19 18:27:29.75 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@localhost | gbk                  | gbk_chinese_ci       | utf8mb4_0900_ai_ci |
+--------------+--------+-------+-------------------------------+--------+------------------------+--------------------------------------------+----------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)