【问题标题】:Does BEFORE INSERT trigger get executed for every row in "insert on duplicate key update" query是否对“插入重复键更新”查询中的每一行执行 BEFORE INSERT 触发器
【发布时间】:2011-12-04 06:51:06
【问题描述】:

这是如何工作的?如果要运行的查询如下所示,mysql 是否仅在插入的情况下或每次发生插入或更新时才调用 BEFORE INSERT 触发器“

INSERT INTO tSomething VALUES (...) ON DUPLICATE KEY UPDATE ......

我想在插入行时根据其他列的值更新列的值。但是,我不希望这种行为用于更新。将始终执行的查询将是上面提到的查询。为此,我选择了 INSERT AFTER。但是,我无法使用 AFTER INSERT TRIGGER 作为

来更新 col

SET NEW.score = NEW.score1 + NEW.score2 ;

我在某处读到,在这种情况下,BEFORE INSERT 触发器将允许每次执行上述查询时触发触发器。这是真的 ?如果是,如何使用触发器解决此问题。

【问题讨论】:

    标签: mysql triggers insert


    【解决方案1】:

    mysql 是否仅在插入或每次插入或更新发生时才调用 AFTER INSERT 触发器

    from the manual

    将为每一行激活一个 BEFORE INSERT 触发器,然后是一个 AFTER INSERT 触发器或同时激活 BEFORE UPDATE 和 AFTER UPDATE 触发器,具体取决于该行是否存在重复键

    我不确定你到底在追求什么。

    但是,我不希望这种行为用于更新”这句话不知何故让我感到困惑。如果您唯一拥有的是 AFTER INSERT 触发器,那么如果您运行 UPDATE 语句,它将不会被触发。如果您的语句更新了一行,它将触发 UPDATE 触发器,而不是您的 INSERT 触发器。

    【讨论】:

    • 我想表达的是,在我的场景中,我将上面提到的查询仅用于插入和更新。为了实现将 col 的值更新为要插入的行中其他 col 值的函数的所需行为,我应该使用 BEFORE INSERT 或 AFTER INSERT 什么? BEFORE INSERT 触发器将为上面提到的每个查询“q”执行。但是,只有通过该 sql 执行的插入才会触发 AFTER INSERT。但是使用 AFTER INSERT,我无法将列设置为“SET NEW.col = .....”,因为您无法在插入触发器后设置 NEW。
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多