UPDATE之前,每当与触发器关联的表上触发更新操作时,都会自动调用MySQL中的触发器。在本文中,无涯教程将学习如何使用其语法和示例创建更新前触发器。
以下是在MySQL中创建BEFORE UPDATE触发器的语法:
CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW trigger_body ;
BEFORE UPDATE触发器语法参数的解释如下:
如果要执行多个语句,将使用 BEGIN END 块,该块包含一组查询来定义触发器的逻辑。请参见以下语法:
DELIMITER $$ CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN variable declarations trigger code END$$ DELIMITER ;
让无涯教程通过示例了解如何使用 MySQL中的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 ;
如果触发器创建成功,将获得如下输出:
如果将"quantity"列中的值更新为一个比当前值大两倍的新值,触发器将产生一条错误消息并停止更新。
详细了解创建的触发器:
首先,无涯教程在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;
因为它违反了规则,所以将给出以下错误。请参见以下输出。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)