1. 概念
觸發器(trigger)是乙個特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件觸發。
觸發器經常用於加強資料的完整性約束和業務規則等。
2. 語法
create trigger 觸發器名稱 before|after 觸發事件
on 表名 for each row
begin
觸發器程式體
end-- 觸發器名稱,它和mysql中其他物件的命名方式
-- 觸發器觸發的時機
-- 觸發器事件
-- for each row 子句通知觸發器每隔一行執行一次動作,而不是對整個表執行一次。
-- (針對insert和delete語句,每一行都觸發)
mysql> desc student;
| field | type | null | key | default | extra |
| id | int(10) unsigned | no | pri | null | auto_increment |
| name | varchar(50) | yes | | null | |
2 rows in set (0.02 sec)
mysql> desc student_total;
| field | type | null | key | default | extra |
| total | int(11) | yes | | null | |
1 row in set (0.01 sec)
mysql> delimiter &&
mysql> create trigger student_insert_trigger after insert
-> on student for each row
-> begin
-> update student_total set total=total+1;
-> end&&
mysql> delimiter ;
3. 檢視觸發器
通過show語句檢視
show triggers\g
通過系統表檢視
use information_shcema;
select * from tirggers\g
select * from triggers where trigger_name = '觸發器名稱'\g
4. 刪除觸發器
drop trigger 觸發器名稱
5. 觸發器示例
--安全地刪除表
drop table if exists tab1;
5.1 增加tab1表記錄後自動將記錄新增到tab2中
5.1.1表結構
mysql> desc tab1;
| field | type | null | key | default | extra |
| tab1_id | varchar(50) | yes | | null | |
1 row in set (0.02 sec)
mysql> desc tab2;
| field | type | null | key | default | extra |
| tab2_id | varchar(50) | yes | | null | |
1 row in set (0.00 sec)
5.1.2 建立觸發器
觸發器中new和old的作用
針對update操作,new表示的是更新後的值,old表示的是原來的資料。
針對insert操作,new表示的是插入的值。
針對delete操作,old表示的是刪除後的值。
觸發器命名規範
表名觸發時機動作
-- 插入觸發器
mysql> delimiter $$
mysql> create trigger tab1_after_insert after insert
-> on tab1 for each row
-> begin
-> insert into tab2(tab2_id) values(new.tab1_id);
-> end
query ok, 0 rows affected (0.02 sec)
mysql> delimiter ;
-- 刪除觸發器
mysql> delimiter $$
mysql> create trigger tab1_delete_after after delete
-> on tab1 for each rows
-> begin
-> delete from tab2 where tab2_id = old.tab1_id;
-> end
query ok, 0 rows affected (0.01 sec)
mysql> delimiter ;
5.2 記錄學生表的更新
5.2.1 表結構
-- 學生表
mysql> desc student1;
| field | type | null | key | default | extra |
| student_id | int(11) | no | pri | null | auto_increment |
| student_name | varchar(30) | no | | null | |
| student_*** | enum('male','female') | yes | | male | |
3 rows in set (0.00 sec)
-- 更新記錄表
mysql> desc update_student1;
| field | type | null | key | default | extra |
| update_record | int(11) | no | pri | null | auto_increment |
| student_id | int(11) | no | | null | |
| update_date | date | yes | | null | |
3 rows in set (0.00 sec)
5.2.2 建立觸發器
-- 更新學生表的同時也更新記錄表
delimiter $$
mysql> create trigger student1_update_after after update
-> on student1 for each row
-> begin
-> if new.student_id != old.student_id then
-> update update_student1 set student_id = new.student_id, update_date = now()
-> where student_id = old.student_id;
-> end if;
-> end
delimiter ;
-- 刪除學生表的時候也刪除記錄表
mysql> delimiter $$
mysql> create trigger student1_delete_before before delete
-> on student1 for each row
-> begin
-> delete from update_student1
-> where student_id = old.student_id;
-> end
delimiter ;
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...
my sql 觸發器 MySQL檢視觸發器
檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...