Mysql觸發器

Mysql 觸發器 trigger 是針對數據庫操作語句DML而言的,嚴格上來說,SQL語句是分爲DQL和DML的,有些地方把這兩者都劃到了一起,但是如果區別來看,理解觸發器trigger則更簡單。

舉例:

1 登錄某個系統後,如果修改相應的賬戶信息,則自動發一個確認信息通知用戶本人防止惡意操作。

2 註冊用戶的時候自動發一個激活郵件到對方的郵箱,當對方點擊郵件則激活該賬戶。

3 商城購買東西一件東西之後,那麼商品數量自動減一。


根據例子分析:上面我們可以利用Mysql定義一個觸發器,觸發器可以再一個操作之前或者之後執行。


DML語句:

insert

delete

update

Mysql的觸發器是在版本5之後開始支持的,當然目前而言除非特別老的項目,我估計也沒有使用Mysql5.0之下的了。

Mysql只有表才支持觸發器,視圖並不支持,它不是真實的表。


Drop trigger xxxName;//刪除觸發器


一次定義終身使用,如果想要更改觸發器的內容,則必須刪除再重新創建。


按照每個表 每個事件 每次 定義觸發器。

之前 before

之後 after

因此一個表最多可以定義6個觸發器。

一個觸發器只能對應一個事件。

觸發器例子:


1 after insert trigger

drop table if EXISTS table1;

create table table1(

 table1_id varchar(11)

);

create table table2(

 table2_id VARCHAR(11)

);

create TRIGGER t_afterinsert_on_table1

AFTER INSERT on table1

for each row 

BEGIN

   insert into table2(table2_id) values (new.table1_id);

end;


insert into table1(table1_id) values('001');

SELECT * from table1;

select * from table2;


2 after delete trigger


insert into table1(table2_id) values('001'); 

insert into table2(table2_id) values('001'); 


drop trigger t_afterdelete_on_table1;


create TRIGGER t_afterdelete_on_table1

after DELETE on table1

for each ROW

BEGIN

  DELETE from table2 where table2_id =old.table1.id;

END;


delete from table1 where table1_id ='001';



3  after update trigger   old表 是更新以前的數據, new表示更新後的數據

   

create table table3(

userName VARCHAR(10)

);

desc table3;

create TRIGGER beforeupdateUser 

BEFORE UPDATE ON table3

for each row 

BEGIN

set New.userName=UPPER(New.userName);

END;

SELECT * from table3;

insert into table3(userName) values('kevin');

update table3 set userName ='tom';






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章