本文更新于2019-06-23,使用MySQL 5.7,作業系統為Deepin 15.4,
目錄
- SQL陳述句
- 示例
SQL陳述句
為了便于描述,此處將創建觸發器的DDL復述一次,其已于“SQL”章節描述,
CREATE TRIGGER triggername BEFORE|AFTER INSERT|UPDATE|DELETE
ON tablename FOR EACH ROW
statement_list
在statement_list中使用別名OLD和NEW來參考觸發器中發生變化的舊記錄和新記錄內容,目前觸發器只支持行級觸發,不支持陳述句級觸發,
觸發器是行觸發的,按照BEFORE觸發器、行操作、AFTER觸發器的順序執行,任何一步出錯都不會繼續執行余下操作,如果是事務表,則會整個作為一個事務回滾,對INSERT INTO ... ON DUPLICATE KEY UPDATE ...陳述句,若有重復主鍵的記錄需進行UPDATE,觸發順序為BEFORE INSERT、BEFORE UPDATE、AFTER UPDATE;若沒有重復主鍵的記錄直接INSERT,觸發順序為BEFORE INSERT、AFTER INSERT,
statement_list可以通過存盤程序或函式的OUT或INOUT引數將資料回傳觸發器,但不能呼叫直接RETURNS的函式,也不能顯式或隱式開始或結束事務,如START TRANSACTION、COMMIT、ROLLBACK,
示例
DELIMITER ;;
CREATE TRIGGER trigger_test BEFORE UPDATE
ON t FOR EACH ROW
BEGIN
INSERT INTO history(old_id, old_value, new_id, new_value) VALUES (OLD.id, OLD.value, NEW.id, NEW.value);
END;;
DELIMITER ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/12647.html
標籤:MySQL
下一篇:MySQL 資料庫的存盤結構
