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

2021-07-02 03:06:01 字數 3044 閱讀 7264

觸發器(trigger)是mysql的資料庫物件之一,該物件與程式語言中的函式非常類似,都需要宣告、執行,但是觸發器的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,啟用從而實現執行。

例項:

1、學生表中擁有字段學生姓名,字段學生總數,每當新增一條學生記錄時,學生總數就必須同時改變。

2、在顧客資訊表中擁有字段顧客名字,字段顧客**和字段顧客位址縮寫,每當新增一條關於顧客記錄時,都需要檢查**號碼格式是否正確,顧客位址縮寫是否正確。

總之,需要在表發生更改時,自動進行一些處理,如檢查資料合法性,觸動其他字段更新,mysql的約束裡沒有字段大小範圍的約束。

mysql在觸發如下語句時,就會自動執行所設定的操作:

1、delete

2、insert

3、update

其他sql語句則不會啟用觸發器

乙個表在相同觸發時間的相同觸發時間,只能建立乙個觸發器。因此,對於有經驗的使用者,當在建立觸發器之前,需要檢視mysql軟體中是否已經存在該標示符的觸發器和觸發器的相關事件。

一、建立

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

create trigger triggername

before|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_diary
create 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_diarytime

before 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_event
on tablename for each row
begin

trigger_stmt

end

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

例:delimiter $$

create trigger tri_diarytime2

after 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

學習筆記之MYSQL篇 觸發器

觸發器 trigger 是使用者定義在關係表上的一類由事件驅動的特殊過程 create trigger 觸發器名 觸發事件 on 表名 觸發事件 insert插入 update更新 delete刪除 referencing new old row as 變數 referencing 指出引用變數 f...

MySQL學習之觸發器

對觸發器的理解 觸發器和儲存過程一樣,都是嵌入在mysql中的一段程式,兩者區別是 觸發器是由事件觸發產生,而儲存過程則是由 call 來呼叫的。觸發器主要用於滿足複雜的業務要求。一 建立觸發器 1 建立乙個執行語句的觸發器 create trigger trigger name trigger t...

mysql之觸發器詳解 MySQL之觸發器詳解

觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...