
来源:爱游戏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 個工作天內聯絡您,一經查實,本站將马上刪除涉嫌侵權內容。
相关推荐