
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者帳戶
- MySQL - 解鎖使用者帳戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - NOT EQUAL 運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數字函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複資料
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - CHECK 約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 觸發器
通常,觸發器被定義為對事件的響應。在 MySQL 中,觸發器是一種駐留在系統目錄中的特殊儲存過程,它在執行事件時自動執行(不像常規儲存過程那樣需要顯式呼叫)。這些事件包括 INSERT、UPDATE 和 DELETE 等語句。
要執行 MySQL 觸發器,使用者必須具有管理員/超級使用者許可權。
根據 SQL 標準,觸發器通常分為兩類:
行級觸發器:僅在資料庫表中插入、更新或刪除每一行時才執行的觸發器。MySQL 只支援這種型別的觸發器。
語句級觸發器:這類觸發器在事務級別執行一次,無論表中修改了多少行。MySQL 不支援這種型別的觸發器。
MySQL 中的觸發器型別
MySQL 中有六種型別的行級觸發器,它們是:
BEFORE INSERT 觸發器
AFTER INSERT 觸發器
BEFORE UPDATE 觸發器
AFTER UPDATE 觸發器
BEFORE DELETE 觸發器
AFTER DELETE 觸發器
BEFORE INSERT 觸發器
BEFORE INSERT 觸發器在任何值插入到表中之前執行。每當執行 INSERT 語句時,BEFORE INSERT 觸發器就會啟動,然後是插入事務。
AFTER INSERT 觸發器
AFTER INSERT 觸發器的工作方式與 BEFORE INSERT 觸發器相反。顧名思義,它是在任何值插入到表中之後執行的。每當執行 INSERT 語句時,值首先插入到表中,然後執行觸發器。
BEFORE UPDATE 觸發器
BEFORE UPDATE 觸發器在任何值在表中更新或修改之前執行。每當執行 UPDATE 語句時,BEFORE UPDATE 觸發器就會啟動,然後是更新事務。
AFTER UPDATE 觸發器
AFTER UPDATE 觸發器的工作方式與 BEFORE UPDATE 觸發器相反。顧名思義,它是在任何值在表中更新之後執行的。每當執行 UPDATE 語句時,值首先在表中更新,然後執行觸發器。
BEFORE DELETE 觸發器
BEFORE DELETE 觸發器在任何值從表中刪除之前執行。每當執行 DELETE 語句時,BEFORE DELETE 觸發器就會啟動,然後是刪除事務。
AFTER DELETE 觸發器
AFTER DELETE 觸發器的工作方式與 BEFORE DELETE 觸發器相反。顧名思義,它是在任何值從表中刪除之後執行的。每當執行 DELETE 語句時,值首先從表中刪除,然後執行觸發器。
觸發器的優點
觸發器在 MySQL 資料庫中有很多優點,它們列舉如下:
觸發器幫助資料庫維護儲存資料的完整性。
觸發器也是從資料庫層本身處理錯誤的一種方法。
由於觸發器是自動呼叫的,無需顯式呼叫,因此您無需等待計劃事件執行。
觸發器可用於透過記錄事件來跟蹤對錶所做的資料更改。
MySQL 觸發器還可以防止執行無效的事務。
觸發器的缺點
但是,在 MySQL 資料庫中使用觸發器也有一些缺點,其中一些列舉如下:
觸發器不能替代所有驗證,只能提供擴充套件驗證。對於簡單的驗證,可以使用 NOT NULL、UNIQUE、CHECK 和 FOREIGN KEY 約束。
由於觸發器對客戶端應用程式是不可見的,因此無法理解資料庫層中發生的情況。因此,難以進行故障排除。
觸發器不適用於高速資料,即每秒事件數量較高的資料。
觸發器可能會增加 MySQL 伺服器的開銷。
觸發器的限制
以下是適用於 MySQL 觸發器的一些限制:
每個事件一個觸發器 - 每個表對每個事件組合只能有一個觸發器,即不能為同一表定義兩個相同的觸發器。
不允許使用 RETURN 語句 − 由於觸發器不返回值,因此不允許使用 RETURN 語句。
外部索引鍵約束 − 外部索引鍵操作不會啟用觸發器。
元資料過期 − 假設觸發器已載入到快取中,當表元資料更改時,它不會自動重新載入。在這種情況下,觸發器可能會使用過時的元資料進行操作。
無法使用 'CALL' 語句 − 在觸發器中無法使用 CALL 語句。
無法建立臨時表或檢視 − 無法為臨時表或檢視建立檢視。
不會因 INFORMATION_SCHEMA 的更改而啟用 − 實際上,INFORMATION_SCHEMA 或 performance_schema 表中的更改不會啟用觸發器。這是因為這些表是檢視,而檢視上不允許使用觸發器。