mysql 觸發器 通知程式 MySQL觸發器

2021-10-22 05:15:49 字數 3800 閱讀 2895

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語句檢視觸發器...