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';