(10)MySQL觸發器(同時操作兩張表)


什么是觸發器

觸發器是與表有關的數據庫對象,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性。

舉個例子,比如你現在有兩個表【用戶表】和【日志表】,當一個用戶被創建的時候,就需要在日志表中插入創建的log日志,如果在不使用觸發器的情況下,你需要編寫程序語言邏輯才能實現,但是如果你定義了一個觸發器,觸發器的作用就是當你在用戶表中插入一條數據的之后幫你在日志表中插入一條日志信息。當然觸發器並不是只能進行插入操作,還能執行修改,刪除

 

觸發器的事件:事件就是比如insert是插入指令,這時候只要定義好insert,那么就會在插入時候觸發,其他的update等操作不會觸發

# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
...
END
 
# 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
...
END
 
# 刪除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
...
END
 
# 刪除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
...
END
 
# 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END
 
# 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END

 

創建觸發器的語法如下:

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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM