咨询电话:010-52882318
您的位置: 首页 > 产品展示 > 触发器

触发器

爱游戏ayx体育:觸發器的树立和运用總結

来源:爱游戏ayx体育    发布时间:2026-08-21 00:12:52

产品详情

爱游戏ayx体育登录:

  觸發器(TRIGGER)是MySQL的資料庫物件之一,從5.0.2版别開始援助。該對象與程式設計語言中的函數十分類似,都需求聲明、執行等。可是觸發器的執行不是由程式調用,也不是由手工啟動,而是由事情來觸發、啟用從而實現執行。有點類似DOM中的事情。

  那麼為什麼要运用資料庫物件觸發器呢?在具體開發項目時,經常會遇到如下執行個體:

  1 在學生表中擁有欄位學生名字,欄位學生總數,每當添加一條學生資訊時,學生的總數就必須同時更改。

  2 在學生表中還會有學生名字的縮寫,學生住址等欄位,新增學生資訊時,往往需求檢查電話、郵箱等格局是否正確。

  上面的比方运用觸發器完结時具有這樣的特點,需求在表發生改變時,自動進行一些處理。MySQL在觸發DELETE/UPDATE/INSERT語句時就會自動執行所設定的操作,其他SQL語句則不會啟用觸發器。

  2 树立簡單觸發器,在向學生表INSERT資料時,學生數添加,DELETE學生時,學生數減少

  可以看到無論是INSERT還是DELETE學生,學生數目都是跟隨著變化的。

  仍然沿袭上面的比方中的表,對student_count表做如下變更:添加student_class欄位表明具體年級的學生數,其中0表明全年級,1代表1年級……;同樣學生表中也添加該欄位。清空兩個表中的一切資料。

  1 刪除上例中的兩個觸發器,初始化student_count表中資料,刺进三條資料(0,0),(1,0),(2,0)表明全年級、一年級、二年級的初始人數都是0;

  2 树立觸發器,在INSERT時首要添加學生總人數,然後判斷新增的學生是幾年級的,再添加對應年級的學生總數:

  3 树立觸發器,在DELETE時首要減少學生總人數,然後判斷刪除的學生是幾年級的,再減少對應年級的學生總數:

  4 向學生表平分別刺进多條不同年級的學生資訊,检查觸發器是否起作用:

  可以看到,總共刺进了6條資料,學生總數是6,1年級4個,2年級2個,trigger正確執行。

  5 從學生表平分別刪除多條不同年級的學生資訊,检查觸發器是否起作用:

  從學生表中將名字以A開頭的學生資訊刪除,學生資訊刪除的同時,數量表也跟隨變化。

  在上面的樣本中,运用了三個新的關鍵字:DELIMITER、NEW、OLD,這三個關鍵字在官網上“觸發器文法”一節中都有介紹,收拾如下:

  运用BEGIN…END結構,可以定義一個執行多句SQL的觸發器。在BEGIN語句塊中,還可以正常的运用其它的文法,例如條件陳述式和迴圈語句。在MySQL中,分號”;”標誌著SQL語句的結束,可是在觸發器要執行的SQL語句中运用到了”;”作為要執行SQL語句的結束標記,所以你要重新定義結束標識符。

  重新定義結束標識符运用DELIMITER關鍵字,後面跟空格和重新定義的結束標識符。

  注意:該語句與其他語句不同的是不需求在語句结尾添加結束標誌符,如DELIMITER

  NEW在觸發器為INSERT事情類型時有用,表明當前正在刺进的資料;同理,OLD在觸發器類型為DELETE事情類型時有用,表明當前正在刪除的資料。

  如上面的樣本中,可以在觸發器中运用NEW.student_class获得正在刺进的學生資訊中年級值,运用OLD.student_class获得正在刪除的學生資訊中的年級值。

  1 觸發器只能树立在永久表上,不能對暫存資料表树立觸發器;

  2 觸發器不可以运用CALL語句調用具有傳回值或运用了動態SQL的預存程序(預存程序能运用OUT或INOUT參數回来給觸發器傳回值)。

  3 觸發器中不能运用開啟或結束事務的語句段,比方,開始事務(START TRANSACTION)、提交事務(COMMIT)或是復原事務(ROLLBACK),可是復原到一個儲存點(SAVEPOINT是允許的,因為復原到儲存點不會結束事務);

  5 當运用基於行的複製時,從表上的觸發器不會因操作主表中的資料而啟用。當运用基於語句的複製時,從表上的觸發器會被啟用。參考Section17.4.1.34,“Replication and Triggers”;

  6 觸發器中不允許傳回值,因而觸發器中不能有回来語句,如果要当即中止一個觸發器,應該运用LEAVE語句;

  MySQL的觸發器是依照BEFORE觸發器、行操作、AFTER觸發器的順序執行的,其中任何一步發生錯誤都不會繼續執行剩余的操作。如果是對事務表進行的操作,那麼會整個作為一個事務被復原,可是如果是對非事務表進行的操作,那麼已經更新的記錄將無法復原,這也是設計觸發器的時候需求注意的問題。

  可以通過執行SHOW TRIGGERS指令检查觸發器,可是因為不能查詢指定的觸發器,所以每次都回来一切的觸發器的資訊,运用不方便。可是可以正常的运用查詢系統資料表information_schema.triggers的方法指定查詢條件,检查指定的觸發器資訊。如:

  本文章原先以中文撰寫並發佈於亦設英文版别,僅作資訊用处。本網站不對文章的準確性,完整性或可靠性或其任何翻譯作出任何明示或暗示的陳述或保證。如對該文章有任何疑慮或投訴,請傳送電郵至 info- 並供给相關疑慮或投訴的詳細說明。職員會於 5 個工作天內與您聯絡,一經驗證之後,即會刪除該侵權內容。

  該頁面正文內容均來源於網絡收拾,並不代表阿里雲官方的觀點,該頁面所说到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

  如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至:info-進行舉報並供给相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將马上刪除涉嫌侵權內容。

相关推荐