摘要:在本教程中,您将学习如何使用 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;
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,在
CREATE TRIGGER
关键字后指定要创建的触发器的名称。请注意,触发器名称在数据库中必须是唯一的。 - 接下来,指定触发器操作时间,可以是
BEFORE
或AFTER
,表示在修改每行之前或之后调用触发器。 - 然后,指定激活触发器的操作,可以是
INSERT
、UPDATE
或DELETE
。 - 之后,在
ON
关键字后指定触发器所属的表的名称。 - 最后,指定触发器激活时要执行的语句。如果要执行多个语句,请使用
BEGIN END
复合语句。
触发器主体可以访问受 DML 语句影响的列的值。
要区分 DML 触发BEFORE
和AFTER
的列值,可以使用NEW
和OLD
修饰符。
例如,如果您更新列描述,则在触发器主体中,您可以访问更新之前的描述值OLD.description
和新值NEW.description
。
下表说明了OLD
和NEW
修饰符的可用性:
触发事件 | OLD | NEW |
INSERT | 不 | 是的 |
UPDATE | 是的 | 是的 |
DELETE | 是的 | 不 |
MySQL 触发器示例
让我们开始在MySQL 中创建一个触发器来记录employees
表的更改。
首先,创建一个名为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
);
Code language: SQL (Structured Query Language) (sql)
接下来,创建一个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();
Code language: SQL (Structured Query Language) (sql)
在触发器体内,我们使用OLD
关键字来访问受触发器影响的行的employeeNumber
和lastname
列的值。
然后,使用SHOW TRIGGERS
语句显示当前数据库中的所有触发器:
SHOW TRIGGERS;
Code language: SQL (Structured Query Language) (sql)
此外,如果您使用 MySQL Workbench 在员工 > 触发器下查看架构,您将看到before_employee_update
触发器,如下面的屏幕截图所示:
之后,更新employees
表中的一行:
UPDATE employees
SET
lastName = 'Phan'
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)
最后,查询employees_audit
表以检查触发器是否由UPDATE
语句触发:
SELECT * FROM employees_audit;
Code language: SQL (Structured Query Language) (sql)
下面显示了查询的输出:
从输出中可以清楚地看到,触发器被自动调用,并将新行插入到employees_audit
表中。
在本教程中,您学习了如何使用 MySQL CREATE TRIGGER
语句在数据库中创建新触发器。