觸發器是一種過程完整性約束(CREATE TABLE 中定義的是非過程性約束)。觸發器是一段小程式,在程式在特定的時刻被自動觸發執行。 基本語法 語法含義:當某一事件(INSERT,DELETE,UPDATE)發生時,我們可以根據該事件產生的結果來判斷是否執行後面的程式段。 示例 設計一個觸發器,當... ...
觸發器是一種過程完整性約束(CREATE TABLE 中定義的是非過程性約束)。觸發器是一段小程式,在程式在特定的時刻被自動觸發執行。
基本語法
語法含義:當某一事件(INSERT,DELETE,UPDATE)發生時,我們可以根據該事件產生的結果來判斷是否執行後面的程式段。
示例
設計一個觸發器,當進行teacher表更新元組時,其工資只能升不能降
DELIMITER $$
CREATE TRIGGER teacher_chgsal
BEFORE UPDATE ON teacher
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
INSERT INTO error_log VALUES("invalid salary update");
END IF;
END$$
DELIMITER ;
在上面的代碼中,我們重新定義結束符為$$(MYSQL命令行客戶端一個SQL語句的結束標誌位是;),因為我們在寫觸發器程式時需要用到分號。上面的觸發器規定在對teacher進行更新操作時之前,會對每個更新操作進行檢查(FOR EACH ROW),因為用戶的一條SQL語句可以進行多行更新。檢查的內容是BEGIN…END中間的代碼塊。NEW表示更新後的元組,OLD表示在更新操作執行前資料庫中存儲的元組。如果發現更新的值小,則在error_log中插入一條記錄。
更新前的記錄
更新後的記錄
error_log表中的數據
error_log表中多了一條記錄,表示更新出現錯誤(001的工資變少了)
MYSQL觸發器的使用請見
https://dev.mysql.com/doc/refman/5.5/en/triggers.html