mysql怎么創(chuàng)建觸發(fā)器

MySQL創(chuàng)建觸發(fā)器首先要創(chuàng)建觸發(fā)器中待存儲的表,然后再設(shè)定觸發(fā)器被激活的時刻,最后在滿足定義條件時觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合

mysql怎么創(chuàng)建觸發(fā)器

【推薦課程:MySQL教程

觸發(fā)器

觸發(fā)器是MySQL的數(shù)據(jù)庫對象之一,它與編程語言中的函數(shù)非常相似,都需要聲明、執(zhí)行等。但是觸發(fā)器的執(zhí)行不是由程序調(diào)用,也不是由手工啟動,而是由事件來觸發(fā)、激活從而實現(xiàn)執(zhí)行。有點類似DOM中的事件。

觸發(fā)器的創(chuàng)建

創(chuàng)建觸發(fā)器的語法如下:

CREATE?? <insert> ON??FOR?EACH?Row</insert>

語法解析

觸發(fā)器名

指觸發(fā)器名稱,且在數(shù)據(jù)庫中是唯一的(如果在某個特定數(shù)據(jù)庫中建立需要加上數(shù)據(jù)庫名稱)

?INSERT | UPDATE | DELETE

表示觸發(fā)事件,用于指定激活觸發(fā)器的語句的種類

INSERT:將新行插入表時激活觸發(fā)器

DELETE: 從表中刪除某一行數(shù)據(jù)時激活觸發(fā)器

UPDATE:更改表中某一行數(shù)據(jù)時激活觸發(fā)器

BEFORE | AFTER

觸發(fā)器被觸發(fā)的時刻,表示觸發(fā)器是在激活它的語句之前或之后觸發(fā)。若希望驗證新數(shù)據(jù)是否滿足條件,則使用 BEFORE 選項;若希望在激活觸發(fā)器的語句執(zhí)行之后完成幾個或更多的改變,則通常使用 AFTER 選項。

表名

與觸發(fā)器相關(guān)聯(lián)的表名,此表必須是永久性表,不能將觸發(fā)器與臨時表或視圖關(guān)聯(lián)起來。在該表上觸發(fā)事件發(fā)生時才會激活觸發(fā)器。同一個表不能擁有兩個具有相同觸發(fā)時刻和事件的觸發(fā)器。

觸發(fā)器主體

觸發(fā)器動作主體,包含觸發(fā)器激活時將要執(zhí)行的 MySQL 語句。如果要執(zhí)行多個語句,可使用 BEGIN…END 復(fù)合語句結(jié)構(gòu)。

FOR EACH ROW

指行級觸發(fā),對于受觸發(fā)事件影響的每一行都要激活觸發(fā)器的動作。

注意:對同一個表相同觸發(fā)時間的相同觸發(fā)事件,只能定義一個觸發(fā)器。觸發(fā)器只能創(chuàng)建在永久表上,不能對臨時表創(chuàng)建觸發(fā)器。

mysql怎么創(chuàng)建觸發(fā)器

例:創(chuàng)建一個名為double_salary的觸發(fā)器

double_salary ???-&gt;?AFTER?INSERT?ON?tb_emp1 ???-&gt;?FOR?EACH?ROW ???-&gt;?INSERT?INTO?tb_emp2 ???-&gt;?VALUES?(NEW.id,NEW.name,deptId,2*NEW.salary); Query?OK,?0?rows?affected?(0.25?sec)

上述代碼的含義是創(chuàng)建了一個double_salary的觸發(fā)器,觸發(fā)的條件是向數(shù)據(jù)表 tb_emp1中插入數(shù)據(jù)之后,再向數(shù)據(jù)表 tb_emp2 中插入相同的數(shù)據(jù),并且 salary 為 tb_emp1 中新插入的 salary 字段值的 2 倍。

總結(jié):

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊9 分享