什麼是觸發器?MySQL觸發器概念及其應用解析

2021-10-23 07:31:05 字數 2852 閱讀 7250

觸發器自動執行。當對表進行insert、 update以及delete操作,試圖修改表中的資料時,相應操作的觸發器立即自動執行。

觸發器可以通過資料庫中相關表進行層疊更改。這比直接把**寫在前台的做法更安全合理。

觸發器可以實現表的約束實現不了的複雜約束。在觸發器可以引用其他表的列,從而實現多個表之間資料的約束。

觸發器可以維護冗餘資料,實現外來鍵級聯選項等。

create

trigger觸發器名

after

/ before insert

/update

/delete

on表名

for each row

begin

.sql語句;

#觸發程式.

end;

需要注意的是:

觸發器是資料庫物件,因此建立觸發器時,需要指定該觸發器屬於哪乙個資料庫。觸發器是在表上建立的。這個表必須是基表,不能是臨時表,也不能是檢視。mysql的觸發事件有三種: insert、update及delete

insert:將新記錄插入表時啟用觸發程式。

update:更改表中的記錄時啟用觸發程式。

delete:從表中刪除記錄葉啟用觸發程式。

觸發器的觸發時間有兩種:before和after

before表示在觸發事件發生之前執行觸發程式,after表示在觸發事件發生之後執行觸發程式。

for each row表示行級觸發器。

目前,mysql僅支援行級觸發器,不支援語句級別的觸發器。for each row表示insert、update及delete操作影響的每一條記錄都會執行一次觸發程式

觸發程式中的select語句不能產生結果集。觸發程式中可以使用old關鍵字與new關鍵字

①當向表中插入新記錄時,在觸發程式中可以使用new關鍵字表示新記錄。當需要訪問新記錄中的某個欄位時,可以使用「new. 欄位名」進行訪問。

②當從表中刪除某條舊記錄時,在觸發程式中可以使用old關鍵字表示舊記錄。當需要訪問舊記錄中的某個欄位時,可以使用「old. 欄位名」進行訪問。

③當修改表中的某條記錄時,在觸發程式中可以使用new關鍵字表示修改後的記錄。使用old關鍵字表示修改前的記錄。當需要訪問修改後的記錄中的某個欄位時,可以使用「new. 欄位名」進行訪問。當需要訪問舊記錄中的某個欄位時,可以使用「old. 欄位名」進行訪問。

④old記錄是唯讀的,在觸發程式中只能引用它,但不能更改它。在before觸發程式中,可使用「set new. 欄位名=值」更改new記錄的值。但在after觸發程式中,不能使用「set new. 欄位名=值」更改new記錄的值。

⑤對於insert操作,只有new是合法的。對於delete操作,只有old是合法的。對於update操作,new和old都是合法的。

對於innodb儲存引擎的表,由於支援外來鍵約束關係,在定義外來鍵約束時,通過設定外來鍵級聯選項cascade、set null或者no action (restrict),外來鍵約束關係可以交由innodb儲存引擎自動維護。外來鍵級聯選項cascade、set null或者no action(restrict) 含義如下:

cascade: 從父表中刪除或更新對應的行,同時自動的刪除或更新子表 中匹配的行。on delete cascade和on update cascade都被 innodb所支援。

setnull:從父表中刪除或更新對應的行,同時將子表中的外來鍵列設 為空。注意,這些在外鍵列沒有被設為not null時才有效。 on delete set null和on update set set null都被innodb 所支援。

no action: innodb拒絕刪除或者更新父表。

restrict: 拒絕刪除或者更新父表。指定restrict (或者no action) 和 忽略on delete或者0n update選項的效果是一樣的。

對於innodb儲存引擎的表之間存在外來鍵約束關係但不存在級聯選項;或者使用的資料庫表為myisam(myisam表不支援外來鍵約束關係),此時可以使用觸發器來實現外來鍵約束之間的級聯選項。

使用show triggers命令檢視觸發器的定義。使用「show triggers\g" 命令可以檢視當前資料庫中所有觸發器的資訊。使用「show trigger like模式\g"命令檢視與模式模糊匹配的觸發器的資訊。

使用show create trigger命 令檢視觸發器的定義。

使用「show create trigger 觸發器名」命令可以檢視指定名稱

的觸發器的定義。

通過查詢information_ schema資料庫中的triggers表,可以檢視觸發器的定義。

mysql中所有觸發器的定義都存放在informat ion_ _schema資料庫裡的triggers表中,查詢triggers表時,可以檢視所有資料庫中所有觸發器的詳細資訊,查詢語句如下:

select

*from information_ schema

. triggers \g

如果某個觸發器不再使用,可以使用droptr. igger語句將其刪除。drop tr igger語句語法如下:

drop

trigger觸發器名;

觸發器 mysql觸發器

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

什麼是MySQL觸發器

mysql的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式。利用mysql觸發器可以對錶進行增 刪 改操作同時響應另一張表做出相同的操作。下面簡單介紹一下mysql觸發器的基本語法。如何建立乙個觸發器 修改delimiter為 mysql d 建立乙個名字為tg1的觸發器,當向t1表中插入資料...

mysql觸發器when MySQL觸發器

set quoted identifier on goset ansi nulls on goalter trigger trg risks on dbo.projectrisk for insert,update asbegin update projectrisk set classificat...