【Mysql】trigger觸發器(一些例項)
阿新 • • 發佈:2018-11-20
簡述
搞這個,主要是因為在網上根本沒找到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)
不滿足條件就不修改或更新
- 這個想了蠻久的,最終,在stackoverflow上找到了解答
但是很好奇,這麼好的答案居然沒有被作者選為標準答案。 - https://stackoverflow.com/questions/6634093/is-possible-to-do-a-rollback-in-a-mysql-trigger
- 下面的含義是:如果在選課表sc上更新的一個新名字沒有在學生表student上,那就是觸發一個exception。
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//
同樣的名稱不能有不同的操作
- 很可惜,mysql不能類似於oracle有可以實現
before UPDATE or INSERT
類似於這樣的操作。 - 所以,要寫就寫兩個(命名要不同)吧
- 但是在下面的stackoverflow上,有新的解法。
- https://stackoverflow.com/questions/1318224/mysql-fire-trigger-for-both-insert-and-update
- 上面的標準答案說的是,可以建立兩個觸發器,但是呼叫一個建立好的procedure就好了。簡直是太機智了
刪除
- 刪除
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)