Create Trigger in 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;Code language: SQL (Structured Query Language) (sql)

在这个语法中:

  • 首先,在CREATE TRIGGER关键字后指定要创建的触发器的名称。请注意,触发器名称在数据库中必须是唯一的。
  • 接下来,指定触发器操作时间,可以是BEFOREAFTER ,表示在修改每行之前或之后调用触发器。
  • 然后,指定激活触发器的操作,可以是INSERTUPDATEDELETE
  • 之后,在ON关键字后指定触发器所属的表的名称。
  • 最后,指定触发器激活时要执行的语句。如果要执行多个语句,请使用BEGIN END复合语句。

触发器主体可以访问受 DML 语句影响的列的值。

要区分 DML 触发BEFOREAFTER的列值,可以使用NEWOLD修饰符。

例如,如果您更新列描述,则在触发器主体中,您可以访问更新之前的描述值OLD.description和新值NEW.description

下表说明了OLDNEW修饰符的可用性:

触发事件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关键字来访问受触发器影响的行的employeeNumberlastname列的值。

然后,使用SHOW TRIGGERS语句显示当前数据库中的所有触发器:

SHOW TRIGGERS;Code language: SQL (Structured Query Language) (sql)
MySQL CREATE TRIGGER - 显示触发器

此外,如果您使用 MySQL Workbench 在员工 > 触发器下查看架构,您将看到before_employee_update触发器,如下面的屏幕截图所示:

MySQL创建触发器示例

之后,更新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)

下面显示了查询的输出:

MySQL 创建触发器示例

从输出中可以清楚地看到,触发器被自动调用,并将新行插入到employees_audit表中。

在本教程中,您学习了如何使用 MySQL CREATE TRIGGER语句在数据库中创建新触发器。

本教程有帮助吗?