什么是觸發器
觸發器是與表有關的數據庫對象,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性。
舉個例子,比如你現在有兩個表【用戶表】和【日志表】,當一個用戶被創建的時候,就需要在日志表中插入創建的log日志,如果在不使用觸發器的情況下,你需要編寫程序語言邏輯才能實現,但是如果你定義了一個觸發器,觸發器的作用就是當你在用戶表中插入一條數據的之后幫你在日志表中插入一條日志信息。當然觸發器並不是只能進行插入操作,還能執行修改,刪除
觸發器的事件:事件就是比如insert是插入指令,這時候只要定義好insert,那么就會在插入時候觸發,其他的update等操作不會觸發
創建觸發器的語法如下:
CREATE TRIGGER 觸發器名字 BEFORE DELETE ON 觸發表的名字 FOR EACH ROW
BEGIN
insert into user_log (列名) values ('值');
END
trigger_name:觸發器的名稱
tirgger_time:觸發時機,為BEFORE或者AFTER
trigger_event:觸發事件,為INSERT、DELETE或者UPDATE
tb_name:表示建立觸發器的表明,就是在哪張表上建立觸發器
trigger_stmt:觸發器的程序體,可以是一條SQL語句或者是用BEGIN和END包含的多條語句
所以可以說MySQL創建以下六種觸發器:
1、BEFORE INSERT
2、BEFORE DELETE
3、BEFORE UPDATE
4、AFTER INSERT
5、AFTER DELETE
6、AFTER UPDATE
修改終止符
創建觸發器實例:
DROP TRIGGER 觸發器名字 #刪除觸發器
show triggers \G; #查看觸發器的指令
*************************** 1. row ***************************
Trigger: userlog #觸發器的名字
Event: INSERT #什么操作下觸發,也就是監聽的事件
Table: user #觸發表的名字
Statement: BEGIN #觸發器的開始
insert into user_log (name) values ('xxxxx'); #sql指令
END #觸發器結束
Timing: BEFORE
Created: NULL
sql_mode: NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
Trigger: demo
Event: DELETE
Table: user
Statement: BEGIN
insert into user_log (name) values ('xxxx');
END
Timing: BEFORE
Created: NULL
sql_mode: NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: gbk
collation_connection: gbk_chinese_ci
Database Collation: latin1_swedish_ci
2 rows in set (0.01 sec)