重慶分公司,新征程啟航
為企業(yè)提供網站建設、域名注冊、服務器等服務
為企業(yè)提供網站建設、域名注冊、服務器等服務
這篇文章主要介紹了MySQL觸發(fā)器如何寫,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)公司于2013年成立,公司以網站建設、成都網站建設、系統(tǒng)開發(fā)、網絡推廣、文化傳媒、企業(yè)宣傳、平面廣告設計等為主要業(yè)務,適用行業(yè)近百種。服務企業(yè)客戶上千多家,涉及國內多個省份客戶。擁有多年網站建設開發(fā)經驗。為企業(yè)提供專業(yè)的網站建設、創(chuàng)意設計、宣傳推廣等服務。 通過專業(yè)的設計、獨特的風格,為不同客戶提供各種風格的特色服務。
觸發(fā)器是與 MySQL 數據表有關的數據庫對象,在滿足定義條件時觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合。觸發(fā)器的這種特性可以協(xié)助應用在數據庫端確保數據的完整性。
語法格式如下:
CREATE <觸發(fā)器名> < BEFORE | AFTER >ON <表名> FOR EACH Row<觸發(fā)器主體>
語法說明如下。
1) 觸發(fā)器名
觸發(fā)器的名稱,觸發(fā)器在當前數據庫中必須具有唯一的名稱。如果要在某個特定數據庫中創(chuàng)建,名稱前面應該加上數據庫的名稱。
2) INSERT | UPDATE | DELETE
觸發(fā)事件,用于指定激活觸發(fā)器的語句的種類。
注意:三種觸發(fā)器的執(zhí)行時間如下。INSERT:將新行插入表時激活觸發(fā)器。例如,INSERT 的 BEFORE 觸發(fā)器不僅能被 MySQL 的 INSERT 語句激活,也能被 LOAD DATA 語句激活。DELETE: 從表中刪除某一行數據時激活觸發(fā)器,例如 DELETE 和 REPLACE 語句。UPDATE:更改表中某一行數據時激活觸發(fā)器,例如 UPDATE 語句。
3) BEFORE | AFTER
BEFORE 和 AFTER,觸發(fā)器被觸發(fā)的時刻,表示觸發(fā)器是在激活它的語句之前或之后觸發(fā)。若希望驗證新數據是否滿足條件,則使用 BEFORE 選項;若希望在激活觸發(fā)器的語句執(zhí)行之后完成幾個或更多的改變,則通常使用 AFTER 選項。
4) 表名
與觸發(fā)器相關聯(lián)的表名,此表必須是永久性表,不能將觸發(fā)器與臨時表或視圖關聯(lián)起來。在該表上觸發(fā)事件發(fā)生時才會激活觸發(fā)器。同一個表不能擁有兩個具有相同觸發(fā)時刻和事件的觸發(fā)器。例如,對于一張數據表,不能同時有兩個 BEFORE UPDATE 觸發(fā)器,但可以有一個 BEFORE UPDATE 觸發(fā)器和一個 BEFORE INSERT 觸發(fā)器,或一個 BEFORE UPDATE 觸發(fā)器和一個 AFTER UPDATE 觸發(fā)器。
5) 觸發(fā)器主體
觸發(fā)器動作主體,包含觸發(fā)器激活時將要執(zhí)行的 MySQL 語句。如果要執(zhí)行多個語句,可使用 BEGIN…END 復合語句結構。
6) FOR EACH ROW
一般是指行級觸發(fā),對于受觸發(fā)事件影響的每一行都要激活觸發(fā)器的動作。例如,使用 INSERT 語句向某個表中插入多行數據時,觸發(fā)器會對每一行數據的插入都執(zhí)行相應的觸發(fā)器動作。
注意:每個表都支持 INSERT、UPDATE 和 DELETE 的 BEFORE 與 AFTER,因此每個表最多支持 6 個觸發(fā)器。每個表的每個事件每次只允許有一個觸發(fā)器。單一觸發(fā)器不能與多個事件或多個表關聯(lián)。
另外,在 MySQL 中,若需要查看數據庫中已有的觸發(fā)器,則可以使用 SHOW TRIGGERS 語句。
例子:
BEGIN IF new.state in ('2','3') then INSERT INTO `userservice`.`ehome_us_green_examine` (modifydate,modifyuser,brancCode,stateDescription,state, userID,fromSystemkey,applydate,makeHospitalName,illnessName, userName,rightsholderName,tranno) VALUES ( sysdate(), 'manage', old.brancCode, old.stateDescription, new.state, '', old.fromSystemkey, old.applydate,old.makeHospitalName,old.illnessName, old.userName,old.rightsholderName, old.tranno); END IF; END
這個觸發(fā)器比較簡單,
1、BEGIN到END,之間是對數據庫的操作
2、IF到END IF之間是判斷,你想的對,就是如果。。。的意思
3、new.state in ('2','3') 這句的意思是:該表的字段state為(2或者3)的時候
4、執(zhí)行下面的插入語句,new為新值,old是原來的值(如old.userName就是原來的這個字段的值)
5、整個觸發(fā)器翻譯成白話就是,如果該表的state變成2或者3的時候,執(zhí)行下面的插入語句
備注:那么觸發(fā)器是發(fā)生在狀態(tài)變化之前還是之后呢?選Before或者After,顧名思義!
感謝你能夠認真閱讀完這篇文章,希望小編分享mysql觸發(fā)器如何寫內容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學習!