MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)
什么是觸發(fā)器
觸發(fā)器是與表有關的數(shù)據(jù)庫對象,在滿足定義條件時觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合。觸發(fā)器的這種特性可以協(xié)助應用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性。
舉個例子,比如你現(xiàn)在有兩個表【用戶表】和【日志表】,當一個用戶被創(chuàng)建的時候,就需要在日志表中插入創(chuàng)建的log日志,如果在不使用觸發(fā)器的情況下,你需要編寫程序語言邏輯才能實現(xiàn),但是如果你定義了一個觸發(fā)器,觸發(fā)器的作用就是當你在用戶表中插入一條數(shù)據(jù)的之后幫你在日志表中插入一條日志信息。當然觸發(fā)器并不是只能進行插入操作,還能執(zhí)行修改,刪除
觸發(fā)器的事件:事件就是比如insert是插入指令,這時候只要定義好insert,那么就會在插入時候觸發(fā),其他的update等操作不會觸發(fā)
# 插入前
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
創(chuàng)建觸發(fā)器的語法如下:
CREATE TRIGGER 觸發(fā)器名字 BEFORE DELETE?ON 觸發(fā)表的名字 FOR EACH ROW
BEGIN
insert into user_log (列名) values ('值');
END
trigger_name:觸發(fā)器的名稱
tirgger_time:觸發(fā)時機,為BEFORE或者AFTER
trigger_event:觸發(fā)事件,為INSERT、DELETE或者UPDATE
tb_name:表示建立觸發(fā)器的表明,就是在哪張表上建立觸發(fā)器
trigger_stmt:觸發(fā)器的程序體,可以是一條SQL語句或者是用BEGIN和END包含的多條語句
所以可以說MySQL創(chuàng)建以下六種觸發(fā)器:
1、BEFORE INSERT
2、BEFORE DELETE
3、BEFORE UPDATE
4、AFTER INSERT
5、AFTER DELETE
6、AFTER UPDATE
修改終止符
創(chuàng)建觸發(fā)器實例:
DROP TRIGGER 觸發(fā)器名字? #刪除觸發(fā)器
show triggers \G;? #查看觸發(fā)器的指令
*************************** 1. row ***************************
Trigger: userlog? #觸發(fā)器的名字
Event: INSERT? #什么操作下觸發(fā),也就是監(jiān)聽的事件
Table: user? #觸發(fā)表的名字
Statement: BEGIN? ?#觸發(fā)器的開始
insert into user_log (name) values ('xxxxx');? #sql指令
END? #觸發(fā)器結(jié)束
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)
總結(jié)
以上是生活随笔為你收集整理的MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c# export server 调用s
- 下一篇: mysql逆向工程_Mybatis+My