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语句以查看表数据,如下所示:
接下来,我们将使用
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 ;
如果成功创建触发器,我们将得到如下输出:
如果我们将数量列中的值更新为当前值的两倍,则触发器会生成一条错误消息并停止更新。
让我们了解创建的值。触发器的详细信息:
首先,我们在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工作台中创建BEFORE UPDATE触发器?
要使用 MySQL工作台创建BEFORE UPDATE触发器,我们首先需要启动它,然后使用我们之前创建的用户名和密码登录。我们将得到如下所示的屏幕:
现在请执行以下操作创建BEFORE UPDATE触发器的步骤:
1、转到"导航"选项卡,然后单击
Schema菜单,该菜单包含 MySQL 服务器。
2、选择数据库(例如
employeedb ),双击它,然后显示包含表,视图,函数和存储过程的
子菜单。参见下面的屏幕。
3、展开
表格子菜单,然后选择要在其上创建触发器的表格。选择表格后,右键单击所选表格(例如sales_info),然后单击
Alter Table (更改表格)选项。参见下图:
4、单击" Alter Table"选项,将显示以下屏幕:
5,现在,单击上一节的红色矩形框中显示的
Trigger选项卡,然后选择UPDATE之前的Timing/Event。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择时间/事件获得触发器的默认代码:
6、现在,完成触发代码,再次检查它们,如果没有发现错误,请单击
应用按钮。
7、单击"应用"按钮后,单击
完成按钮以完成操作。
8、如果进入模式菜单,我们将在sales_info表下看到 trigger
sales_info_before_update 如下: