【发布时间】:2022-06-16 01:13:36
【问题描述】:
我想了解触发器在 MySQL 中的工作原理,因为这个概念似乎很清楚。
这就是为什么如果可能的话,我想知道一些关于触发器的解释。
【问题讨论】:
我想了解触发器在 MySQL 中的工作原理,因为这个概念似乎很清楚。
这就是为什么如果可能的话,我想知道一些关于触发器的解释。
【问题讨论】:
要了解触发器的工作原理,您应该问自己以下问题:
它是一个存储的例程,在事件发生时自动执行。
触发器与表相关联(过程和函数与数据库相关联)。
与触发器相关的指令是:
CREATE TRIGGERSHOW TRIGGERDROP TRIGGER 修改被删除和重写的触发器。之前、之后(要执行的操作:插入、删除或更新)
这为我们提供了 6 种可能性: 插入前、插入后、删除前、删除后、更新前、更新后
在一个表中不能有两个相同类型的触发器。在现代版本(MySQL >= 5.7.2)中,可以为具有相同触发事件和相同操作时间的给定表定义多个触发器
FOR EACH ROW BEGIN.....END表示对每一行数据执行的指令
有些组合没有意义:用 OLD 插入 INSERT 和用 NEW 删除。
NEW : 与 INSERT 或 UPDATE 一起使用的新数据。
OLD : 是旧数据,与 UPDATE 或 DELETE 一起使用。
例如:我们有 2 张桌子。
copyArticle中item的item code是cod_art 表copyArticle的价格是0的item。
我们如何传递数据?
INSERT INTO copiaArticulos SELECT cod_art,0 FROM articulos;
创建后,我们被要求创建以下触发器:创建一个触发器,每次修改商品的价格时,必须将差额保存在价格中。
例如:文章有10条,文章修改为5条,相差-5。
USE almacen;
DELIMITER $$
DROP trigger IF EXISTS dirPrecio $$
CREATE trigger dirPrecio BEFORE UPDATE on articulos
FOR EACH ROW
BEGIN
UPDATE copiaArticulos SET precio=NEW.precio-OLD.precio WHERE
cod_art=OLD.cod_art;
END $$
DELIMITER ;
【讨论】: