在MySQL中创建触发器
简介:在本教程中,您将学习如何使用MySQL CREATE TRIGGER语句在数据库中创建触发器。
MySQL CREATE TRIGGER语句简介
CREATE TRIGGER语句创建一个新的触发器。
这是CREATE TRIGGER语句的基本语法:
CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON table_name FOR EACH ROW trigger_body;
使用以下语法:
首先,在CREATE TRIGGER关键字之后指定要创建的触发器的名称。
请注意,触发器名称在数据库中必须唯一。接下来,指定触发器动作时间,可以是BEFORE之前或AFTER之后,它指示在修改每行之前或之后调用触发器。
然后,指定激活触发器的操作,可以是INSERT,UPDATE或DELETE。
之后,在ON关键字之后指定触发器所属的表的名称。
最后,指定触发触发器时要执行的语句。
如果要执行多个语句,请使用BEGIN END复合语句。
触发器主体可以访问受DML语句影响的列的值。
要区分DML触发之前和之后的列值,请使用NEW和OLD修饰符。
例如,如果更新列描述,则在触发器主体中,可以在更新OLD.description和新值NEW.description之前访问描述的值。
下表说明了OLD和NEW修饰符的可用性:
Trigger Event | OLD | NEW |
INSERT | No | Yes |
UPDATE | Yes | Yes |
DELETE | Yes | No |
MySQL触发器示例
让我们开始在MySQL中创建一个触发器来记录employee表的更改。
首先,创建一个名为employees_audit的新表以保留对employees表的更改:
CREATE TABLE employees_audit ( id INT AUTO_INCREMENT PRIMARY KEY, employeeNumber INT NOT NULL, lastname VARCHAR(50) NOT NULL, changedat DATETIME DEFAULT NULL, action VARCHAR(50) DEFAULT NULL );
接下来,创建一个BEFORE UPDATE触发器,该触发器在对employees表进行更改之前被调用。
CREATE TRIGGER before_employee_update BEFORE UPDATE ON employees FOR EACH ROW INSERT INTO employees_audit SET action = 'update', employeeNumber = OLD.employeeNumber, lastname = OLD.lastname, changedat = NOW();
在触发器主体内,我们使用OLD关键字访问employeeNumber列的值和受触发器影响的行的姓氏。
然后,使用SHOW TRIGGERS语句显示当前数据库中的所有触发器:
SHOW TRIGGERS;
此外,如果您在雇员>触发器下使用MySQL Workbench查看架构,则会看到before_employee_update触发器,如以下屏幕截图所示:
之后,在employees表中更新一行:
UPDATE employees SET lastName = 'Phan' WHERE employeeNumber = 1056;
最后,查询employees_audit表以检查触发器是否被UPDATE语句触发:
SELECT * FROM employees_audit;
从输出中可以清楚地看到,触发器被自动调用并将新行插入employee_audit表中。
在本教程中,您学习了如何使用MySQL CREATE TRIGGER语句在数据库中创建新触发器。