MySQL MySQL触发器中的“FOR EACH ROW”是如何工作的?

MySQL MySQL触发器中的“FOR EACH ROW”是如何工作的?

MySQL中的触发器是在特定的表上执行并自动触发相关操作的存储过程。它们可以在INSERT、UPDATE或DELETE语句执行之前或之后执行。MySQL的触发器有两种类型:行级别和语句级别。其中,行级别触发器使用“FOR EACH ROW”表示,它将在每一行上运行。本文将重点介绍MySQL触发器中的“FOR EACH ROW”是如何工作的。

阅读更多:MySQL 教程

创建触发器

首先,我们需要在MySQL中创建一个触发器。下面是一个简单的行级别触发器示例:

CREATE TRIGGER my_trigger BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    -- 触发器逻辑
END;

这个触发器将在插入记录到my_table表之前运行。’FOR EACH ROW’语句告诉MySQL该触发器将为每插入一行而运行一次。

触发器中的OLD和NEW关键字

触发器中有两个关键字OLD和NEW,它们表示插入、更新或删除之前的旧行和新行。例如,在一个行级别的触发器中,你可以使用NEW关键字来引用插入的新行:

CREATE TRIGGER my_trigger BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    -- use NEW to reference the new (inserted) row
END;

同样的,你可以使用OLD关键字来引用即将被更新或删除的旧行。在一个更新触发器中,你可以同时使用OLD和NEW关键字:

CREATE TRIGGER my_trigger BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
    -- use OLD and NEW to reference the old and new rows
END;

使用示例

下面的代码展示了如何在行插入之前验证特定字段中的值:

CREATE TRIGGER my_trigger BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    IF NEW.my_col < 0 THEN
        SET NEW.my_col = 0;
    END IF;
END;

这个触发器中,“IF”语句检查my_col字段中的值是否为负,如果是,则将其设置为0。触发器对每个插入行都运行此逻辑。如果你要创建一个更新触发器,可以使用类似的代码。你只需要用“OLD”和“NEW”关键字来引用旧行和新行,以便验证并更新特定字段(或字段的值)。

结论

本文介绍了MySQL触发器中的“FOR EACH ROW”是如何工作的。我们了解到,“FOR EACH ROW”告诉MySQL此触发器将为每一行而运行一次。此外,我们了解到了触发器中可以使用的OLD和NEW关键字,它们分别表示旧行和新行。最后,我们给出了一个简单的示例,演示了如何编写和使用MySQL触发器来验证和更新特定字段的值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程