基本概念
觸發(fā)器(trigger)是MySQL語(yǔ)句響應(yīng)以下任意語(yǔ)句而自動(dòng)執(zhí)行的一條MySQL語(yǔ)句(或位于begin和and之間的一組語(yǔ)句):
- delete
- insert
- update
其他語(yǔ)句不止觸發(fā)器。
只有表支持觸發(fā)器,視圖和臨時(shí)表都不支持。
創(chuàng)建觸發(fā)器
在創(chuàng)建觸發(fā)器時(shí),需要:
- 定義觸發(fā)器名;
- 定義觸發(fā)器關(guān)聯(lián)的表;
- 定義觸發(fā)器響應(yīng)的活動(dòng);
- 定義觸發(fā)器何時(shí)執(zhí)行(處理之前或之后);
create trigger trigger_name before/after insert/delete/update on table_name for...'
觸發(fā)器名必須保持在每個(gè)表中唯一,但不要求在一個(gè)數(shù)據(jù)庫(kù)中唯一。
觸發(fā)器按每個(gè)表每個(gè)時(shí)間每次地定義,每個(gè)表每個(gè)事件每次只允許定義一個(gè)觸發(fā)器。因此,每個(gè)表最多支持6個(gè)觸發(fā)器(insert,delete和update的之前和之后)。
如果before觸發(fā)器失敗,那么MySQL不會(huì)執(zhí)行請(qǐng)求的操作。如果before觸發(fā)器或者語(yǔ)句本身失敗,則不執(zhí)行after觸發(fā)器。
刪除觸發(fā)器
drop trigger trigger_name;
使用觸發(fā)器
create trigger neworder after insert on orders
for each row select NEW.order_num into @aaa;
insert into orders(order_date,cust_id) values(Now(),10001);
select @aaa;