MySQL觸發器是一種保存在數據庫服務器上的程序,用于在數據庫的表上自動執行一些操作。當指定的事件(INSERT、UPDATE、DELETE)在給定的表中發生時,MySQL會自動調用觸發器中的語句執行。在本文中,我們將介紹如何使用MySQL腳本編寫觸發器。
創建觸發器
要創建MySQL觸發器,我們需要使用CREATE TRIGGER語句。該語句具有以下語法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN -- 觸發器語句 END;
其中,trigger_name是觸發器的名稱,trigger_time指定觸發器何時調用(可以是BEFORE或AFTER),trigger_event指定要觸發的事件(可以是INSERT、UPDATE或DELETE),table_name是要在其上創建觸發器的表的名稱。
在觸發器中使用OLD和NEW關鍵字
在MySQL觸發器中,有兩個關鍵字OLD和NEW分別表示舊行和新行。對于INSERT事件,只有NEW關鍵字可用;對于UPDATE事件,舊行和新行都可用;對于DELETE事件,只有舊行可用。下面是一個例子:
CREATE TRIGGER before_user_update BEFORE UPDATE ON user FOR EACH ROW BEGIN IF NEW.name<>OLD.name THEN INSERT INTO user_log (user_id, action) VALUES (NEW.id, CONCAT('User name changed from ', OLD.name, ' to ', NEW.name)); END IF; END;
使用DELIMITER聲明分隔符
我們可以使用DELIMITER語句來告訴MySQL在何處結束語句。這對于在觸發器中使用多個語句非常有用。例如,在上面的例子中,我們使用了多個語句。在CREATE TRIGGER語句之前,我們使用DELIMITER語句將分隔符設置為“$$”:
DELIMITER $$ CREATE TRIGGER before_user_update BEFORE UPDATE ON user FOR EACH ROW BEGIN IF NEW.name<>OLD.name THEN INSERT INTO user_log (user_id, action) VALUES (NEW.id, CONCAT('User name changed from ', OLD.name, ' to ', NEW.name)); END IF; END$$ DELIMITER ;
刪除觸發器
如果要刪除觸發器,我們可以使用DROP TRIGGER語句。該語句的語法如下:
DROP TRIGGER [IF EXISTS] trigger_name
其中,trigger_name是要刪除的觸發器的名稱。如果使用IF EXISTS選項,則在不存在該觸發器的情況下也不會出現錯誤。
總之,MySQL觸發器是自動觸發的程序,它可以在指定的事件發生時自動調用。在創建MySQL觸發器時,我們需要使用CREATE TRIGGER語句。另外,我們可以在觸發器中使用OLD和NEW關鍵字引用舊行和新行。最后,我們可以使用DROP TRIGGER語句刪除觸發器。