Mysql 简明教程

MySQL - CREATE TRIGGER

触发器通常被定义为对事件的响应。例如,当我们悬停鼠标指针在某个网站的下拉菜单上时,将会显示一系列导航该网站的选项。此处,鼠标指针的悬停是一个事件,而下拉菜单中显示的选项是触发器执行的结果。该概念也在 MySQL 中引入。

MySQL 中的触发器类似于过程,是一些存储程序。它们可以在与事件关联的表、架构、视图和数据库上创建,并且每当事件发生时便会调用相应的触发器。

在实际上,触发器编写为对以下任一事件响应而执行:

  1. 数据库操作语言 (DML) 语句 (DELETE、INSERT 或 UPDATE)

  2. 数据库定义语言 (DDL) 语句 (CREATE、ALTER 或 DROP)

  3. 数据库操作 (SERVERERROR、LOGON、LOGOFF、STARTUP 或 SHUTDOWN)

Creating Trigger in MySQL

你可以使用 CREATE TRIGGER 语句创建触发器。

Syntax

以下是 MySQL CREATE TRIGGER 语句的语法。

CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name FOR EACH ROW
BEGIN
...
END;

其中,

  1. trigger_name 是你需要创建的触发器的名称

  2. trigger_time 是触发器激活的时间

  3. trigger_event 可能为 INSERT、UPDATE 或 DELETE。该事件将导致触发器启用。

  4. table_name 是该触发器所关联的表的名称。

Example

假设我们创建了一个名为 student 的表,如下所示:

CREATE TABLE STUDENT(
   Name varchar(35),
   Age INT,
   Score INT
);

以下查询创建了一个触发器,如果输入的值小于 0,它将将得分值设置为 0。

DELIMITER //
CREATE TRIGGER sample_trigger BEFORE INSERT ON STUDENT FOR EACH ROW
BEGIN
IF NEW.Score < 0 THEN SET NEW.Score = 0;
END IF;
END //
DELIMITER ;

Verification

如果你尝试在 student 表中插入记录并且使用小于 0 的值作为年龄,它将自动设置为 0。

INSERT INTO STUDENT VALUES
('Jeevan', 22, 8),
('Raghav', 26, -3),
('Pooja', 21, -9),
('Devi', 30, 9);

创建的 STUDENT 表将具有以下记录 -

如我们所见,表中没有插入负值,因为它们都已替换为零。

Creating Trigger Using a Client Program

我们还可以使用客户端程序创建一个触发器。

Syntax

Example

以下是这些程序 −