MYSQL觸發器的操作

2021-08-09 10:33:12 字數 1681 閱讀 7104

1 為什麼使用觸發器

觸發器是mysql的資料庫物件之一,那為什麼要使用觸發器呢?在開發具體專案時,經常會遇到如下例項:

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

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

上述例項雖然所需實現的業務邏輯不同,但是他們有共同之處,即都需要在表中發生改變時,自動進行一些處理。這時就可以使用觸發器處理資料庫物件。例如,對第乙個例項,可以建立乙個觸發器物件,每新增一條學生記錄,就執行一次計算學生總數的操作。

mysql軟體在觸發如下語句時,就會自動新增所設定的操作:

inserte語句。

delete語句。

update語句。

其他sql語句則不會啟用觸發器,mysql5軟體才開始支援觸發器資料庫物件。

2 建立觸發器

2.1建立一條執行語句的觸發器

語法形式:create trigger trigger_name 

before|after trigger_event

on table_name for each roe trigger_stmt

trigger_name:表示建立觸發器的名稱。

before和after指定觸發器執行的時間,其中前者是指在觸發器事件之前,執行觸發器執行語句,後者指在觸發器執行之後執行觸發器語句。

trigger_event:表示觸發事件,即觸發器執行條件,包含inserte語句,  delete語句,update語句。

table_name :表示操作表的名字。

for each roe:表示任意一條記錄上的操作滿足觸發器都會執行。

tigger_stmt:表示啟用觸發器後執行的語句。

例:部門表t_dept 和日記表t_diary建立觸發器實現向部門表中插入記錄就會再插入之前向日記表中插入當前時間。

sql語句:create trigger tri_diarytime

before insert on t_dept for each row 

insert into t_diary values(null,'t_dept',now());

為了校驗觸發器的功能向表中t_dept插入一條記錄

insert into t_dept values(1,'test','shangxi');

select*fron t_diary;

2.2建立多條語句的觸發器

語法形式:create trigger trigger_name 

before|after trigger_evevt on table_name for each row

begin  trigger_stmt

end例:建立觸發器tri_diarytime2

sql語句:

delimiter $$

create trigger tri_diarytime2

after insert on t_dept for each row

begin   

insert into t_diary valuse(null,『t_dept』,now());

insert into t_diary valuse(null,『t_dept』,now());

enddelimiter;

MySQL觸發器的操作

資料庫物件觸發器用來實現由一些表事件觸發的某個操作,當執行表事件時,則會啟用觸發器,從而執行其包含的操作 mysql在觸發以下語句時,會自動執行所設定的操作 delete insert update語句,其他sql語句則不會啟用觸發器 觸發器的操作包括建立觸發器,檢視觸發器和刪除觸發器。在mysql...

Mysql 觸發器的操作

例子 在資料庫company中存在兩個表物件 部門表 t dept 和日記表 t diary 建立觸發器實現向部門表中插入記錄時,就會在插入之前向日記表中插入當前時間。部門表 日記表 建立觸發器 插入記錄 結果 日記表也多了一條記錄 語法 例子 建立觸發器實現當前向部門表中插入記錄時,就會在插入之後...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...