【问题标题】:What is a trigger and how does it work in MySQL?什么是触发器,它在 MySQL 中是如何工作的?
【发布时间】:2022-06-16 01:13:36
【问题描述】:

我想了解触发器在 MySQL 中的工作原理,因为这个概念似乎很清楚。

这就是为什么如果可能的话,我想知道一些关于触发器的解释。

【问题讨论】:

    标签: mysql triggers mysql-8.0


    【解决方案1】:

    要了解触发器的工作原理,您应该问自己以下问题:

    什么是触发器(MySQL)?

    它是一个存储的例程,在事件发生时自动执行。

    触发器引发的事件是什么?

    • 插入
    • 删除
    • 更新

    3。触发器与什么相关联?

    触发器与表相关联(过程和函数与数据库相关联)。

    4。 Trigger的指令是什么?

    与触发器相关的指令是:

    • CREATE TRIGGER
    • SHOW TRIGGER
    • DROP TRIGGER 修改被删除和重写的触发器。

    什么时候触发触发器 - 触发时机?

    • 之前、之后(要执行的操作:插入、删除或更新)

    • 这为我们提供了 6 种可能性: 插入前、插入后、删除前、删除后、更新前、更新后

    • 在一个表中不能有两个相同类型的触发器。在现代版本(MySQL >= 5.7.2)中,可以为具有相同触发事件和相同操作时间的给定表定义多个触发器

    FOR EACH ROW BEGIN.....END表示对每一行数据执行的指令

    6。别名 NEW 和 OLD 是如何工作的?

    有些组合没有意义:用 OLD 插入 INSERT 和用 NEW 删除。

    NEW : 与 INSERT 或 UPDATE 一起使用的新数据。

    OLD : 是旧数据,与 UPDATE 或 DELETE 一起使用。

    例如:我们有 2 张桌子。

    • 表格文章(cod_art,price,description)
    • copyArticle(cod_art,price)copyArticle(cod_art,price)

    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 ;
    

    Run Example

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 1970-01-01
      • 2013-02-13
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2020-08-06
      相关资源
      最近更新 更多