天天看點

MySQL觸發器trigger

觸發器(trigger):監視某種情況,并觸發某種操作,觸發器必須有名字,最多64個字元,可能後面會附有分隔符.

它和MySQL中其他對象的命名方式基本相象

觸發器建立文法四要素:1.監視地點(table) 2.監視事件DML 3.觸發時間(after/before) 4.觸發事件DML

{ BEFORE | AFTER }  --觸發器有執行的時間設定:可以設定為事件發生前或後。

{ INSERT | UPDATE | DELETE }  --同樣也能設定觸發的事件:它們可以在執行insert、update或delete的過程中觸發

FOR EACH ROW  --觸發器的執行間隔:FOR EACH ROW子句通知觸發器 每隔一行執行一次動作,而不是對整個表執行一次。

####執行觸發器建議使用ROOT的權限

####使用别名old和new,能夠引用與觸發程式相關的表中的列。old.col_name在更新或删除它之前,引用已有行中的1列。new.col_name在更新它之後引用将要插入的新行的1列或已有行的1

列,是以要引用update前的列就用old,要引用update後的列就用new

文法:

create trigger triggerName

 after/before insert/update/delete on tableName

for each row##固定格式

begin

sql語句;

end;

##來個簡單操作:

1、添加兩個表:

CREATE TABLE tabA(id INT NOT NULL PRIMARY KEY,c_name VARCHAR(20));

CREATE TABLE tabB(id INT NOT NULL PRIMARY KEY,c_name VARCHAR(20));

2、建立觸發器:insert

t_aferinsert_on_tabA

####

DELIMITER $$

CREATE TRIGGER test.t_aferinsert_on_taba 

    AFTER INSERT ON taba

    FOR EACH ROW 

    BEGIN

INSERT INTO tabb(id,c_name) VALUES(new.id,new.c_name);

    END;

     $$

DELIMITER;

3、檢視taba、tabb表

SELECT a.id AS aid,a.c_name acname,b.id bid,b.c_name bname FROM taba a JOIN tabb b

4、從taba表插入資料:

INSERT INTO taba(id,c_name)VALUES(1,'test triggers')

##UPDATE 簡單例子:

CREATE TRIGGER t_aferupdate_on_taba 

    AFTER UPDATE ON taba

UPDATE tabb SET c_name=new.c_name WHERE id=new.id;

<a href="http://s1.51cto.com/wyfs02/M01/89/99/wKioL1gYDlDDnAKZAABaLjnj1tA386.png-wh_500x0-wm_3-wmp_4-s_34396873.png" target="_blank"></a>

###DELETE:

CREATE TRIGGER t_aferdelete_on_taba 

    AFTER DELETE ON taba

DELETE FROM tabb WHERE id=old.id;

<a href="http://s5.51cto.com/wyfs02/M02/89/9B/wKiom1gYD4eQWfHtAABSBhd4i10682.png-wh_500x0-wm_3-wmp_4-s_2004523610.png" target="_blank"></a>

本文轉自 DBAspace 51CTO部落格,原文連結:http://blog.51cto.com/dbaspace/1868008