MySQL BEFORE INSERT触发器
在每次执行插入操作时,都会自动调用MySQL中的插入触发器。在本文中,我们将学习如何使用其语法和示例创建插入前触发器。
语法
以下是创建在INSERT 在MySQL中触发之前:
CREATE TRIGGER trigger_name
BEFORE INSERT
ON table_name for EACH ROW
Trigger_body ;
可以在下面解释BEFORE INSERT触发器语法参数:
首先,我们将指定要创建的触发器的名称。它在架构中应该是唯一的。
第二,我们将指定触发动作时间,该时间应为INSERT之前。在表上进行每一行修改之前,将调用此触发器。
第三,我们将指定与触发器关联的表的名称。它必须写在ON关键字之后。如果不指定表名,则触发器将不存在。
最后,我们将指定触发触发器时要执行的语句。
如果要执行多个语句,我们将使用
BEGIN END 块,该块包含一组查询来定义触发器的逻辑。请参见以下语法:
DELIMITER $
CREATE TRIGGER trigger_name BEFORE INSERT
ON table_name for EACH ROW
BEGIN
variable declarations
trigger code
END$
DELIMITER ;
限制
我们只能在INSERT触发器之前访问和更改 NEW 值。
我们无法访问 OLD 。如果尝试访问OLD值,则会收到错误消息,因为OLD值不存在。
我们无法在 VIEW 上创建INSERT触发器。
插入前触发器示例
让我们了解如何使用 CREATE TRIGGER语句创建插入前触发器和 MySQL 中的示例。
假设我们创建了一个名为
员工如下:
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 //
如果成功创建触发器,我们将获得如下输出:
如何调用INSERT触发器之前?
我们可以使用以下语句来调用上面创建的触发器:
mysql> INSERT INTO employee VALUES
('Markus', 'Scientist', '2020-10-08', 14);
mysql> INSERT INTO employee VALUES
('Alexander', 'Actor', '2020-10-012', 13);
执行上面的语句后,我们将得到如下输出:
执行SELECT语句以验证输出:
在此输出中,我们可以看到,在将职业列值插入为"科学家"时,该表将通过调用触发器自动填充"医生"值。
如何在MySQL工作台中创建插入前触发器?
要使用此工具创建插入前触发器,我们首先需要启动 MySQL Workbench ,然后使用我们之前创建的用户名和密码登录。我们将显示如下屏幕:
现在请执行以下操作创建INSERT触发器之前的步骤:
1、转到导航选项卡,然后单击
架构菜单,其中包含MySQL服务器中所有可用的数据库。
2、选择数据库(例如,
mysqltestdb ),双击它。它将显示
子菜单,其中包含表,视图,函数和存储过程。参见下面的屏幕。
3、展开
表格子菜单,然后选择要在其上创建触发器的表格。选择表格后,右键单击所选表格(例如
employee ),然后单击
Alter Table 选项。参见下图:
4、单击"更改表"选项将显示以下屏幕:
5、现在,单击上一节的红色矩形框中显示的
Trigger选项卡,然后在插入之前选择Timing/Event。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择时间/事件在触发器上获得默认代码:
6、现在,完成触发代码,再次检查它们,没有发现错误,单击
应用按钮。
7、单击"应用"按钮后,单击
完成按钮以完成操作。
8、如果进入模式菜单,我们将在employee表下看到
employee_BEFORE_INSERT 触发器,如下所示: