MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL BEFORE UPDATE触发器

BEFORE UPDATE每当在与触发器关联的表上触发更新操作时,都会自动调用MySQL中的触发器。在本文中,我们将学习如何使用其语法和示例创建更新前触发器。

语法

以下是用于创建更新前触发器的语法MySQL中的UPDATE触发器之前:
CREATE TRIGGER trigger_name 
BEFORE UPDATE
ON table_name for EACH ROW
trigger_body ;
BEFORE UPDATE触发器语法参数的解释如下:
首先,我们将指定要创建的触发名称。它在架构中应该是唯一的。 第二,我们将指定触发动作时间,该时间应为UPDATE之前。在表的每一行更改发生之前,将触发此触发器。 第三,我们将指定与触发器关联的表的名称。它必须写在 ON关键字之后。如果不指定表名,则触发器将不存在。 最后,我们将指定触发主体,其中包含在触发触发器时执行的语句。
如果要执行多个语句,我们将使用 BEGIN END 块,该块包含一组查询来定义触发器的逻辑。请参见以下语法:
DELIMITER $ 
CREATE TRIGGER trigger_name BEFORE UPDATE
ON table_name for EACH ROW
BEGIN
   variable declarations
   trigger code
END$
DELIMITER ;

限制

我们无法在"更新前"触发器中更新OLD值。 我们可以更改新值。 我们无法在VIEW上创建BEFORE UPDATE触发器。

更新前触发器示例

让我们了解如何使用 CREATE TRIGGER语句创建BEFORE UPDATE触发器
假设我们已经创建了一个名为 sales_info 的表,如下所示:
CREATE TABLE sales_info (
    id int AUTO_INCREMENT,
    product VARCHAR(100) NOT null,
    quantity int NOT null default 0,
    fiscalYear SMALLint NOT null,
    CHECK(fiscalYear BETWEEN 2000 and 2050),
    CHECK (quantity >=0),
    UNIQUE(product, fiscalYear),
    PRIMARY KEY(id)
);
接下来,我们将一些记录插入到sales_info表中,如下所示:
INSERT INTO sales_info(product, quantity, fiscalYear)
VALUES
    ('2003 Maruti Suzuki',110, 2020),
    ('2015 Avenger', 120,2020),
    ('2018 Honda Shine', 150,2020),
    ('2014 Apache', 150,2020);
然后,执行 SELECT语句以查看表数据,如下所示:
MySQL BEFORE UPDATE触发器
接下来,我们将使用 CREATE TRIGGER 语句创建一个BEFORE UPDATE触发器。在表中发生更新事件之前,将自动调用此触发器。
DELIMITER $
CREATE TRIGGER before_update_salesInfo
BEFORE UPDATE
ON sales_info for EACH ROW
BEGIN
    DECLARE error_msg VARCHAR(255);
    SET error_msg = ('The new quantity cannot be greater than 2 times the current quantity');
    if new.quantity > old.quantity * 2 THEN
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = error_msg;
    END IF;
END $
DELIMITER ;
如果成功创建触发器,我们将得到如下输出:
MySQL之前UPDATE Trigger
如果我们将数量列中的值更新为当前值的两倍,则触发器会生成一条错误消息并停止更新。
让我们了解创建的值。触发器的详细信息:
首先,我们在CREATE TRIGGER子句中将触发器名称指定为befor_update_salesInfo。其次,指定触发事件,然后指定与触发器关联的表名。第三,我们声明了一个变量并设置了它的值。最后,我们指定了触发器主体,该主体将检查新值是否比旧值大两倍,然后引发错误。

如何调用"更新前"触发器?

首先,我们可以使用以下语句更新id = 2的行的数量:
mysql> UPDATE sales_info SET quantity = 125 WHERE id = 2; 
此语句有效,因为它没有违反规则。接下来,我们将执行以下语句,将id = 2的行的数量更新为600
mysql> UPDATE sales_info SET quantity = 600 WHERE id = 2; 
由于违反规则,将给出以下错误。参见下面的输出。
MySQL之前更新触发器

如何要在MySQL工作台中创建BEFORE UPDATE触发器?

要使用 MySQL工作台创建BEFORE UPDATE触发器,我们首先需要启动它,然后使用我们之前创建的用户名和密码登录。我们将得到如下所示的屏幕:
MySQL之前更新触发器
现在请执行以下操作创建BEFORE UPDATE触发器的步骤:
1、转到"导航"选项卡,然后单击 Schema菜单,该菜单包含 MySQL 服务器。
2、选择数据库(例如 employeedb ),双击它,然后显示包含表,视图,函数和存储过程的 子菜单。参见下面的屏幕。
MySQL BEFORE UPDATE Trigger
3、展开 表格子菜单,然后选择要在其上创建触发器的表格。选择表格后,右键单击所选表格(例如sales_info),然后单击 Alter Table (更改表格)选项。参见下图:
MySQL在更新触发器之前
4、单击" Alter Table"选项,将显示以下屏幕:
MySQL在更新前触发Trigger
5,现在,单击上一节的红色矩形框中显示的 Trigger选项卡,然后选择UPDATE之前的Timing/Event。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择时间/事件获得触发器的默认代码:
MySQL更新前触发器
6、现在,完成触发代码,再次检查它们,如果没有发现错误,请单击 应用按钮。
MySQL BEFORE UPDATE Trigger
7、单击"应用"按钮后,单击 完成按钮以完成操作。
 MySQL在更新触发器之前
8、如果进入模式菜单,我们将在sales_info表下看到 trigger sales_info_before_update 如下:
MySQL在更新之前触发
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4