MySQL筆記系列 觸發器

2021-09-19 08:44:53 字數 2662 閱讀 8539

一. 觸發器介紹

用途:當我們希望使用者在使用資料庫時(增刪改查),資料庫會自動執行一些命令,而不是人為的去敲命令,或者是開發人員在**裡寫命令。

場景:我們希望使用者在對錶進行修改時,可以把修改同步到另一張表

實現:假設現有一張表stu1,為了方便,我們建立另一張表stu2,然後讓stu2的內容始終與stu1的保持同步

建立stu2的sql

create table stu2 like stu1;
二. 建立觸發器1. 建立觸發器的語法

create trigger trigger_name

trigger_time

trigger_event on tb_name

for each row

trigger_stmt

注:

trigger_name:觸發器的名稱;

trigger_time:觸發時機,取值為before 或者after;

trigger_event:觸發時間,取值為insert, update或者delete;

tb_name:建立觸發器的表名;

for each row:表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器,也就是說觸發器的觸發頻率是針對每一行資料觸發一次。

trigger_stmt:觸發器事件,可以是一條sql語句,也可以是begin和end包含的多條語句;

2. 建立insert型觸發器

例子:建立觸發器,用於向測試表stu1中新增記錄後自動將記錄備份到stu2中。

先將預設的結尾符號;改為//

delimiter //
create trigger afterinsert_on_stu1

after

insert on stu1

for each row

begin

insert into stu2 (id, name) values (new.id, new.name);

end //

注:delimiter // :因為資料庫中預設是以分號";"當做結尾的,但是因為觸發器中也會包含分號,為了讓資料庫區分,所以這兒使用delimiter命令來修改資料庫中結尾的符號為//

使用完後,也可以使用命令delimiter ;改回來,(命令和分號之間是有空格的)

3. 建立delete型觸發器

create trigger afterdelete_on_stu1

after

delete on stu1

for each row

begin

delete from stu2 where id=old.id;

end //

注:mysql中定義了new和old來表示觸發器所在表中觸發了觸發器的哪一行

new關鍵字的用法:new.columnname,old用法類似

old是唯讀的,而new可以在觸發器中使用set賦值,這樣就不會再次觸發觸發器了。

三. 檢視觸發器

1. 使用show triggers檢視

這是我之前在其他表中建立的insert和delete觸發器

2. 在information_schema.triggers表中檢視觸發器

information_schema是mysql資料庫預設就建立的乙個資料庫,triggers是該資料庫下的一張表

檢視

select * from information_schema.triggers

四. 使用觸發器執行順序:觸發器的執行順序依次是before觸發器、行操作、after,過程**錯的話,將不會執行後面的操作,事務表出錯可以回滾,非事務表不能回滾。

五. 刪除觸發器

語法:

drop trigger [if exists] [schema_name.]trigger_name
if exists是可選引數,加了這個引數,如果要刪除的觸發器不存在的話,那麼不會報錯,而是返回乙個警告

例如:刪除資料表stu1中的delete觸發器

drop trigger stu1.afterdelete_on_stu1;
下面是刪除某個不存在的觸發器時,使用if exists和不使用的區別

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

MySQL筆記(MYSQL觸發器)

當執行delete update或insert操作時,可以使用觸發器來觸發某些操作。建立觸發器 create trigger trigger name trigger time trigger event on tbl name for each row trigger stmt 其中 trigge...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...