推特前 CEO:推特所有者變更或影響 Bluesky 融資
阿新 • • 發佈:2022-04-18
Mysql觸發器
1、1 觸發器定義
觸發器是由事件來觸發某個操作, 事件包括 insert update delete事件,
優勢:
- 保證資料完整性。
- 觸發器可以幫助記錄操作日誌
- 觸發器可以用在操作資料前,對資料進行合法性檢測
劣勢:
- 可讀性差。由於觸發器是由事件驅動,不受應用層控制。對系統維護不友好
- 相關資料表結構的變更,有可能會導致觸發器錯誤。
1、2 觸發器使用
-
建立觸發器
# 觸發器建立語法 CREATE TRIGGER name {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 觸發執行的語句塊 #錯誤程式 固定格式 SIGNAL SQLSTATE "錯誤碼" SET MESSAGE_TEXT = '錯誤資訊' # 舉例 DELIMITER // CREATE TRIGGER trigger_insert_live AFTER INSERT ON nlsg_live FOR EACH ROW BEGIN # 自定義錯誤流程判斷 IF NEW.id > 10 THEN SIGNAL SQLSTATE "HY001" SET MESSAGE_TEXT = 'error id > 10'; #自定義校驗 END IF; INSERT INTO nlsg_live_info(live_pid) VALUE(NEW.id); #NEW 為當前insert 資料物件 END // DELIMITER ;
說明:
-
BEFORE|AFTER 表示事件觸發時間。BEFORE在事件之前觸發 AFTER在事件之後觸發。
-
表名 :表示觸發器監控物件。
-
{INSERT|UPDATE|DELETE} : 表示觸發事件。
-
語句塊 : 可以是單條 也可以是由BEGIN...END 結構組合的複合語句。
- 自定義錯誤程式: SIGNAL SQLSTATE "錯誤碼" SET MESSAGE_TEXT = '錯誤資訊';
- NEW : 關鍵字new為觸發事件(insert|update)資料的物件。
- OLD : 關鍵字 為delete事件資料的物件 OLD值因為是刪除操作,所以全部是隻讀的。
-
-
檢視觸發器
#方式一 檢視當前資料庫觸發器資訊 SHOW TRIGGERS; #方式二 檢視當前資料庫某個觸發器資訊 SHOW CREATE TRIGGER trigger_name; #方式三 檢視系統庫所有的觸發器資訊 select * from information_schema.TRIGGERS;
-
刪除觸發器
#方式一 DROP TRIGGER trigger_name; #方式二。 檢索後刪除 推薦使用 DROP TRIGGER IF EXISTS trigger_name;