MySQL BEFORE INSERT触发器

每当执行插入操作时,MySQL 中的BEFORE INSERT触发器就会自动调用。在本文中,我们将学习如何创建BEFORE INSERT触发器及其语法和示例。

一、MySQL 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 触发器中访问和更改新值。
  • 我们无法访问OLD如果我们尝试访问 OLD 值,我们会得到一个错误,因为 OLD 值不存在。
  • 我们不能在VIEW上创建 BEFORE INSERT 触发器。

二、MySQL BEFORE INSERT触发器 示例

让我们了解如何使用CREATE TRIGGER 语句创建 BEFORE INSERT 触发器在MySQL

举个例子,假设我们创建了一个名为employee的表,如下所示:
CREATE TABLE employee(  
    name varchar(45) NOT NULL,    
    occupation varchar(35) NOT NULL,    
    working_date date,  
    working_hours varchar(10)  
);  

 接下来,我们将一些记录插入到employee表中,然后执行SELECT语句看表数据如下:

接下来,我们将使用 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 //  

如果触发器创建成功,我们将得到如下输出:

三、如何调用 BEFORE INSERT 触发器?

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

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

执行上述语句后,我们会得到如下输出:

执行 SELECT 语句以验证输出:

在此输出中,我们可以看到在将occupation​​列值插入为“Scientist”时,表将通过调用触发器自动填充“Doctor”值。

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

要使用此工具创建前插入触发器,我们首先需要启动MySQL Workbench,并使用我们之前创建的用户名和密码登录。我们将得到如下画面:

现在执行以下步骤来创建 BEFORE INSERT 触发器:

1. 转到 Navigation 选项卡并单击包含 MySQL 服务器中所有可用数据库的Schema 菜单。

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

3. 展开表子菜单并选择要在其上创建触发器的表。选择表后,右键单击所选表(例如,employee),然后单击Alter Table选项。见下图:

4. 点击 Alter Table 选项,屏幕如下:

5. 现在,单击上一节红色矩形框中显示的触发器选项卡,然后选择插入前的时序/事件。我们会注意到有一个 (+) 图标按钮来添加触发器。单击该按钮,我们将根据选择时间/事件在触发器上获得默认代码:

6. 现在,完成触发代码,再次查看它们,没有发现错误,点击应用按钮。

7.点击Apply按钮后,点击Finish按钮完成。

8. 如果我们查看模式菜单,我们将在employee 表下看到employee_BEFORE_INSERT触发器,如下所示:

热门文章

优秀文章