MySql觸發器使用講解

2021-07-04 10:50:01 字數 4480 閱讀 1374

觸發器(trigger)是由事件來觸發某個操作。這些事件包括insert語句、update語句和delete語句。當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。mysql從5.0.2版本開始支援觸發器。在本文中將講解的內容包括:

觸發器的含義和作用

如何建立觸發器

如何檢視觸發器

如何刪除觸發器

觸發器是由insert、update和delete等事件來觸發某種特定操作。滿足觸發器的觸發條件時,資料庫系統就會執行觸發器中定義的程式語句。這樣做可以保證某些操作之間的一致性。例如,當學生表中增加了乙個學生的資訊時,學生的總數就必須同時改變。可以在這裡建立乙個觸發器,每次增加乙個學生的記錄,就執行一次計算學生總數的操作。這樣就可以保證每次增加學生的記錄後,學生總數是與記錄數是一致的。觸發器觸發的執行語句可能只有乙個,也可能有多個。本節將詳細講解建立觸發器的方法。

建立只有乙個執行語句的觸發器

mysql中,建立只有乙個執行語句的觸發器的基本形式如下:

create trigger 觸發器名 before | after 觸發事件

on 表名 for each row 執行語句

建立有多個執行語句的觸發器mysql中,觸發器觸發的執行語句可能有多個。建立有多個執行語句的觸發器的基本形式如下:

create trigger 觸發器名 before | after 觸發事件

on 表名 for each row

begin

執行語句列表

end

下面來具體說說語法

1、命名規則

create trigger 《觸發器名稱》 

on 《表名稱》

for each row

begin

《觸發器sql語句》

end

觸發器必須有名字,最多64個字元,可能後面會附有分隔符.它和mysql中其他物件的命名方式基本相象.

觸發器有執行的時間設定:insert | update | delete

3、觸發事件前後

同樣也能設定觸發的事件:它們可以在執行insert、update或delete的過程中觸發。

4.、表

觸發器是屬於某乙個表的:當在這個表上執行插入、

更新或刪除操作的時候就導致觸發器的啟用.

我們不能給同一張表的同乙個事件安排兩個觸發器。

5.、( 步長)觸發間隔

觸發器的執行間隔:for each row子句通知觸發器

每隔一行執行一次動作,而不是對整個表執行一次。

6、 語句

觸發器包含所要觸發的sql語句:這裡的語句可以是任何合法的語句,

包括復合語句,但是這裡的語句受的限制和函式的一樣。

privileges許可權

你必須擁有相當大的許可權才能建立觸發器(create trigger)。如果你已經是root使用者,那麼就足夠了。這跟sql的標準有所不同。

在觸發器的sql語句中,你可以關聯表中的任意列。但你不能僅使用列的名稱去標識,那會使系統混淆,因為那裡可能會有列的新名(這可能正是你要修改的,你的動作可能正是要修改列名),還有列的舊名存在。因此你必須用這樣的語法來標識: "new . column_name"或者"old . column_name".這樣在技術上處理(new | old . column_name)新和舊的列名屬於建立了過渡變數("transition variables")。

對於insert語句,只有new是合法的;對於delete語句,只有old才合法;而update語句可以在和new以及old同時使用。

先建立兩個表、乙個訂單表,乙個訂單時間表

create table t_order(

order_num int primary key,

order_name char(10) not null

);create table t_order_time(

order_num int primary key,

order_time timestamp not null,

)

1、建立插入時的觸發器

create trigger tri_insert

after insert on t_order for each row

begin

insert into learning.t_order_time(order_num,order_time) values(new.order_num,now());

end

然後訂單表中插入一條資料

insert into t_order(order_num,order_name) values(1,'電腦');

select * from t_order;

select * from t_order_time;

這是訂單表中插入的資料:

這是訂單時間表中自動插入的資料:

2、更新時插入資料

//更新建立觸發器

create trigger tri_updata

before update on t_order for each row

begin

update learning.t_order_time set order_time=now() where old.order_num=order_num;

endupdate t_order set order_name='餅乾餅' where order_num=1;

可以看到,時間已經更新

3、建立刪除觸發器

//建立刪除觸發器

create trigger tri_delete

after delete on t_order for each row

begin

delete from learning.t_order_time where old.order_num=order_num;

enddelete from learning.t_order where order_num=1;

select * from t_order;

select * from t_order_time;

可以看到,資料庫中都沒有資料了。

4、檢視觸發器

檢視觸發器是指檢視資料庫中已存在的觸發器的定義、狀態和語法等資訊。檢視觸發器的方法包括show triggers語句和查詢information_schema資料庫下的triggers表等。本節將詳細講解檢視觸發器的方法。

mysql

中,可以執行

show triggers

語句來檢視觸發器的基本資訊。其基本形式如下:

中,所有觸發器的定義都存在

information_schema

資料庫下的

triggers

表中。查詢

triggers

表,可以檢視到資料庫中所有觸發器的詳細資訊。查詢的語句如下:

5、刪除觸發器

drop trigger 觸發器名
6、觸發器 與儲存過程

觸發程式不能呼叫將資料返回客戶端的儲存程式,也不能使用採用call語句的動態sql

(允許儲存程式通過引數將資料返回觸發程式)。

而儲存過程 可以接受引數,將結果範圍給應用程式

mysql 觸發器 觸發器使用

1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...

MySQL觸發器使用詳解

mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 複製 如下 create trigger trigger name trigger time tri...

MySQL觸發器使用詳解

mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 複製 如下 create trigger trigger name trigger time tri...