MySQL BEFORE UPDATE触发器
每当在与触发器关联的表上触发更新操作时,就会自动调用 MySQL 中的 BEFORE UPDATE 触发器。在本文中,我们将学习如何创建BEFORE UPDATE触发器及其语法和示例。
一、MySQL BEFORE UPDATE触发器 语法
以下是在 MySQL 中创建 BEFORE UPDATE 触发器的语法:
CREATE TRIGGER trigger_name
BEFORE UPDATE
ON table_name FOR EACH ROW
trigger_body ;
BEFORE UPDATE 触发器语法参数解释如下:
- 首先,我们将指定要创建的触发器名称。它在架构中应该是唯一的。
- 其次,我们将指定触发动作时间,应该是 BEFORE UPDATE。在表上发生每行更改之前,将调用此触发器。
- 第三,我们将指定与触发器关联的表的名称。它必须写在ON 关键字之后。如果我们没有指定表名,触发器将不存在。
- 最后,我们将指定触发器主体,其中包含在触发器被激活时执行的语句。
如果我们要执行多个语句,我们将使用包含一组查询的BEGIN END块来定义触发器的逻辑。请参阅以下语法:
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE UPDATE
ON table_name FOR EACH ROW
BEGIN
variable declarations
trigger code
END$$
DELIMITER ;
限制
- 我们无法更新 BEFORE UPDATE 触发器中的旧值。
- 我们可以更改新值。
- 我们不能在 VIEW 上创建 BEFORE UPDATE 触发器。
二、MySQL BEFORE UPDATE触发器 示例
让我们了解如何使用MySQL 中的 CREATE TRIGGER 语句创建 BEFORE UPDATE 触发器
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语句查看表数据如下:
接下来,我们将使用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 ;
如果触发器创建成功,我们将得到如下输出:
如果我们将quantity列中的值更新为比当前值大两倍的新值,触发器会产生错误消息并停止更新。
让我们详细了解创建的触发器:
- 首先,我们在 CREATE TRIGGER 子句中将触发器名称指定为 befor_update_salesInfo。
- 其次,指定触发事件,然后指定与触发器关联的表名。
- 第三,我们声明了一个变量并设置了它的值。
- 最后,我们指定了检查新值是否比旧值大两倍然后引发错误的触发器主体。
三、如何调用 BEFORE UPDATE 触发器?
首先,我们可以使用以下语句来更新 id = 2 的行的数量:
mysql> UPDATE sales_info SET quantity = 125 WHERE id = 2;
这个声明很好用,因为它不违反规则。接下来,我们将执行以下语句,将行的数量更新为 600,其 id = 2
mysql> UPDATE sales_info SET quantity = 600 WHERE id = 2;
它将给出如下错误,因为它违反了规则。请参阅下面的输出。
四、如何在 MySQL Workbench中创建 BEFORE UPDATE 触发器?
使用MySQL Workbench创建 BEFORE UPDATE 触发器,我们首先需要启动它,然后使用我们之前创建的用户名和密码登录。我们将得到如下画面:
现在执行以下步骤来创建 BEFORE UPDATE 触发器:
1. 转到 Navigation 选项卡并单击包含MySQL中所有可用数据库的Schema 菜单服务器。
2. 选择数据库(例如employeedb),双击它,显示包含表、视图、函数和存储过程的子菜单。请参阅下面的屏幕。
3. 展开表子菜单并选择要在其上创建触发器的表。选择表后,右键单击所选表(例如 sales_info),然后单击Alter Table选项。见下图:
4. 点击 Alter Table 选项,屏幕如下:
5. 现在,单击上一节红色矩形框中显示的Trigger 选项卡,然后选择 Timing/Event BEFORE UPDATE。我们会注意到有一个 (+) 图标按钮来添加触发器。单击该按钮,我们将根据选择时间/事件获得触发的默认代码:
6. 现在,完成触发器代码,再次检查它们,如果没有发现错误,单击应用按钮。
7.点击Apply按钮后,点击Finish按钮完成。
8.如果我们在模式菜单中,我们将看到触发器sales_info表下的 sales_info_before_update 如下:
热门文章
优秀文章