程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql學習筆記之五(觸發器)

mysql學習筆記之五(觸發器)

編輯:MySQL綜合教程

mysql學習筆記之五(觸發器)


觸發器(trigger)是mysql的數據庫對象之一,該對象與編程語言中的函數非常類似,都需要聲明、執行,但是觸發器的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,激活從而實現執行。

實例:
1、學生表中擁有字段學生姓名,字段學生總數,每當添加一條學生記錄時,學生總數就必須同時改變。
2、在顧客信息表中擁有字段顧客名字,字段顧客電話和字段顧客地址縮寫,每當添加一條關於顧客記錄時,都需要檢查電話號碼格式是否正確,顧客地址縮寫是否正確。

總之,需要在表發生更改時,自動進行一些處理,如檢查數據合法性,觸動其他字段更新,mysql的約束裡沒有字段大小范圍的約束。
mysql在觸發如下語句時,就會自動執行所設置的操作:

1、DELETE
2、INSERT
3、UPDATE

其他sql語句則不會激活觸發器


一個表在相同觸發時間的相同觸發時間,只能創建一個觸發器。因此,對於有經驗的用戶,當在創建觸發器之前,需要查看mysql軟件中是否已經存在該標示符的觸發器和觸發器的相關事件。


一、創建
1、創建有一條執行語句的觸發器

CREATE TRIGGER TRIGGERNAMEBEFORE|AFTER TRIGGER_EVENT

ON TABLE_NAME FOR EACH ROW

TRIGGER_STMT

BEFORE和AFTER
參數指定了觸發器執行的時間
trigger_EVENT
參數表示了觸發事件,即觸發器執行條件,包含delete,insert,update;
for each row
參數表示任何一條記錄上的操作滿足觸發事件都會觸發觸發器;
trigger_stmt
參數表示激活觸發器後被執行的語句
例:創建兩個表t_dept和t_diarycreate table t_dept(
detpno int,
dname varchar(20),
loc varchar(20)
);create table t_diary(
diaryno int primary key,
tablename varchar(20),
diarytime datetime
);desc t_dept;
desc t_diary;
create trigger tri_diarytimebefore insert
on t_dept for each row
insert into t_diaty values(null,'t_dept',now());

insert into t_dept values(1,'cjgongdept','shanxi');驗證:select * from t_diary;

 

2、創建包含多條執行語句的觸發器
 

create trigger triggername

before|after trigger_eventon tablename for each row
begin
trigger_stmt
end

在mysql中,一般情況下用";"符號作為語句的結束符,可是在創建觸發器的時候,需要用到";"符號作為執行語句的結束符號。為了解決這個問題,可以使用關鍵字delimiter語句,例如"delimiter$$",可以用來實現將結束符設置成"$$"。
例:

delimiter $$

create trigger tri_diarytime2after insert
on t_dept for each row
begin
insert into t_diary values(null,'t_dept',now());
insert into t_diary values(null,'t_dept',now());
on
$$
delimiter ;
insert into t_dept values(2,'cjgongdept','shanxi');

驗證:

select * from t_diary;

二、查看

show triggers\G

三、刪除

drop trigger triggername
show triggers\G

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved