程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL 觸發器的基礎操作(六)

MySQL 觸發器的基礎操作(六)

編輯:關於MYSQL數據庫

1.為什麼使用觸發器: 

    在MySQL數據庫中,數據庫對象表是存儲和操作數據的邏輯結構,而數據庫對象觸發器則用來實現由一些表事件觸發的某個操作。在數據庫系統中,當執行表事件時,則會激活觸發器,從而執行器包含的操作。觸發器的操作包含創建、查看、刪除。 

    觸發器是數據庫對象之一,該對象與編程語言 中的函數非常類似,都需要聲明、執行等。但是觸發器的執行不是由程序調用,也不是由手工啟動,而是由事件來觸發、激活從而實現執行。例如:在學生表中有學生名字、學生總數字段,每當添加一條學生記錄時,學生的總數就必須同時改變。對於這個實例可以創建一個觸發器,每次添加一條學生記錄時,就執行一次計算學生總數的操作,這樣就可保證每次添加一條學生記錄後,學生總數和學生記錄數一致。MySQL中在觸發如下DELETE、INSERT、UPDATE語句時,就會自動執行所設置的操作,其他SQL語句則不會激活觸發器。之所以會經常使用觸發器,是因為該對象能夠加強數據庫表中數據的完整性約束和業務規則等。

2.創建觸發器: 
    按照激活觸發器時所執行的語句條目,可以將觸發器分為“一個執行語句的觸發器”和“多個執行語句的觸發器” 

2.1 創建有一條執行語句的觸發器:

語法形式為:

create trigger trigger_name 
  before | after trigger_event
    on table_name for each row trigger_stmt

//trigger_name 參數表示索要創建的觸發器的名字,觸發器的名字不能重復。建議觸發器的命名為trigger_xxx或者tri_xxx;
before和after參數指定了觸發器執行的時間,before:指在觸發器事件之前執行觸發器語句,after:指在觸發器事件之後執行觸發器語句;
trigger_event表示觸發事件,即觸發器執行條件,包delete、insert、update語句;table_name觸發事件操作表的名字;
for each row表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器;trigger_stmt表示激活觸發器後被執行的語句。

示例:

create trigger tri_diaryteim 
  before insert on t_dept for each row
    insert into t_diary values(null,'t_dept',now());
//功能說明:向部門表插入一條記錄之前向表t_diary插入當前時間記錄。

2.2 創建包含多條執行語句的觸發器:

語法形式如下:

create trigger trigger_name
  before|after trigger_event
    on table_name for each row
      begin
      trigger_stmt
      end

//比“只有一條執行語句的觸發器”語法多了兩個關鍵字begin和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());
  end
  $$
    DELIMITER;

3.查看觸發器: 

3.1 通過SHOW TRIGGERS語句查看觸發器:

語法為:
show triggers \G

3.2 通過查看系統表triggers實現查看觸發器:

操作語句為;

use information_schema;
select * from triggers \G
select * from triggers where trigger_name='tri_diarytime2' \G //查看指定觸發器

3.刪除觸發器:

語法為:
drop trigger trigger_name;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

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