MySQL BEFORE INSERT 触发器

MySQL BEFORE INSERT 触发器

在MySQL中,BEFORE INSERT TRIGGER在执行插入操作时会自动调用。在本文中,我们将学习如何使用语法和示例来创建一个before insert触发器。

语法

以下是在MySQL中创建BEFORE INSERT触发器的语法:

CREATE TRIGGER trigger_name 
BEFORE INSERT
ON table_name FOR EACH ROW
Trigger_body ;

BEFORE INSERT触发器的语法参数可以解释如下:

  • 首先,我们将指定要创建的触发器的名称。它必须在模式内是唯一的。
  • 其次,我们将指定触发器的动作时间,应该是BEFORE INSERT。此触发器将在每次对表进行行修改之前被调用。
  • 第三,我们将指定与触发器关联的表的名称。它必须在关键字ON之后进行编写。如果我们没有指定表名,触发器将不存在。
  • 最后,我们将指定触发器激活时要执行的语句。

如果我们想执行多个语句,我们将使用包含一组查询的BEGIN END块来定义触发器的逻辑。请参阅以下语法:

DELIMITER CREATE TRIGGER trigger_name BEFORE INSERT
ON table_name FOR EACH ROW
BEGIN
   variable declarations
   trigger code
END
DELIMITER ;

限制

  • 我们只能在BEFORE INSERT触发器中访问和更改 NEW 的值。
  • 如果我们尝试访问 OLD 的值,将会出现错误,因为OLD的值不存在。
  • 我们不能在 VIEW 上创建BEFORE INSERT触发器。

BEFORE INSERT触发器示例

让我们通过示例来了解如何使用CREATE TRIGGER语句在 MySQL 中创建BEFORE INSERT触发器。

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

CREATE TABLE employee(
    name varchar(45) NOT NULL,  
    occupation varchar(35) NOT NULL,  
    working_date date,
    working_hours varchar(10)
);

接下来,我们将向员工表中插入一些记录,然后执行 SELECT 语句 以查看表格数据,如下所示:

MySQL BEFORE INSERT 触发器

接下来,我们将使用一个 CREATE TRIGGER 语句来创建一个BEFORE INSERT触发器。当有人试图插入 occupation = ‘Scientist’ 时,这个触发器会自动调用并插入 occupation = ‘Leader’

mysql> DELIMITER //
mysql> Create Trigger before_insert_occupation
BEFORE INSERT ON employee FOR EACH ROW
BEGIN
IF NEW.occupation = 'Scientist' THEN SET NEW.occupation = 'Doctor';
END IF;
END //

如果触发器成功创建,则会得到如下输出:

MySQL BEFORE INSERT 触发器

如何调用BEFORE INSERT触发器?

我们可以使用以下语句调用上述创建的触发器:

mysql> INSERT INTO employee VALUES  
('Markus', 'Scientist', '2020-10-08', 14);

mysql> INSERT INTO employee VALUES  
('Alexander', 'Actor', '2020-10-012', 13);

在上面的语句执行之后,我们将得到以下输出:

MySQL BEFORE INSERT 触发器

执行SELECT语句来验证输出:

MySQL BEFORE INSERT 触发器

在这个输出中,我们可以看到当将职业列的值插入为’Scientist’时,表格将自动通过触发器填充’Doctor’值。

如何在MySQL Workbench中创建BEFORE INSERT触发器?

要使用这个工具创建一个before insert触发器,我们首先需要启动 MySQL Workbench 并使用之前创建的用户名和密码登录。我们将得到以下屏幕:

MySQL BEFORE INSERT 触发器

现在,按照以下步骤创建BEFORE INSERT触发器:

1. 转到导航选项卡,点击包含MySQL服务器中所有可用数据库的 模式菜单

2. 选择数据库(例如 mysqltestdb ),双击它。它将显示 子菜单 ,包含表、视图、函数和存储过程。请参阅以下画面。

MySQL BEFORE INSERT 触发器

3. 展开 表子菜单 并选择要创建触发器的表。选择表后,右键单击选定的表(例如, employee ),然后单击 修改表 选项。请参见下面的图像:

MySQL BEFORE INSERT 触发器

4. 单击“修改表”选项会显示如下屏幕:

MySQL BEFORE INSERT 触发器

5. 现在,点击前面小节红色矩形框内显示的 触发器选项卡 ,然后选择计时/事件 BEFORE INSERT。我们将会注意到有一个 (+) 图标按钮可以添加触发器。点击该按钮,我们将会得到一个默认的基于选择计时/事件的触发器代码:

MySQL BEFORE INSERT 触发器

6. 现在,完成触发器代码,再次复查并未发现错误,点击 应用按钮

MySQL BEFORE INSERT 触发器

7. 在点击应用按钮后,点击 完成按钮 以完成。

MySQL BEFORE INSERT 触发器

8. 如果我们看一下模式菜单,我们会看到员工表下面的 employee_BEFORE_INSERT 触发器如下:

MySQL BEFORE INSERT 触发器

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程