觸發器(Triggers)是 MySQL 數據庫中的一種特殊的存儲過程,通過定義的一些條件和事件,使其在某些數據操作的前后進行自動執行。在 MySQL 中,我們可以使用CREATE TRIGGER
命令來創建觸發器。
CREATE TRIGGER trigger_name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON table_name
FOR EACH ROW
trigger_body
其中,trigger_name
是觸發器名稱,table_name
是要觸發的表名,BEFORE
或AFTER
用來指定觸發時機,INSERT
、UPDATE
和DELETE
用來指定觸發的事件,FOR EACH ROW
表示每行數據都將觸發該觸發器,trigger_body
是觸發器執行的主體。
舉個例子,假設我們有一個名叫users
的表,其中包含 id、name 和 age 三個字段。我們可以定義一個在users
表插入新數據時自動更新一份日志表的觸發器:
CREATE TRIGGER log_insert_user
AFTER INSERT ON users
FOR EACH ROW
INSERT INTO log_table (action, user_id, user_name)
VALUES ('insert', NEW.id, NEW.name)
上述代碼中,我們使用了AFTER
和INSERT
選項來表示在插入新數據后觸發,使用NEW
關鍵字來獲取插入的新數據,然后執行插入操作到一個名為log_table
的日志表中。
除了上述例子中的插入操作,我們還可以使用觸發器來處理更新和刪除操作,例如:
CREATE TRIGGER log_update_user
AFTER UPDATE ON users
FOR EACH ROW
INSERT INTO log_table (action, user_id, user_name)
VALUES ('update', OLD.id, OLD.name)
CREATE TRIGGER log_delete_user
AFTER DELETE ON users
FOR EACH ROW
INSERT INTO log_table (action, user_id, user_name)
VALUES ('delete', OLD.id, OLD.name)
值得注意的是,我們可以在一個表上定義多個不同的觸發器,來處理不同的數據操作。同時,觸發器是一項強大的功能,但在設計和使用中需要考慮到影響性能等問題,因此需要謹慎使用。