【问题标题】:AFTER INSERT trigger and INSERT IGNORE / ON DUPLICATE KEY updateAFTER INSERT 触发器和 INSERT IGNORE / ON DUPLICATE KEY 更新
【发布时间】:2014-07-11 12:59:52
【问题描述】:

如果没有插入行,是否应该触发触发器(AFTER INSERT)?

即使没有使用INSERT IGNORE ...INSERT ... ON DUPLICATE KEY UPDATE ... 插入行,也会触发触发器。
这种行为正常吗?

AFTER INSERT 是指在插入一行之后,还是在进行 INSERT 查询之后?
测试显示第二个,但为什么呢?

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    AFTER INSERT 是指在插入一行之后,还是在 INSERT 之后 有查询吗?

    MySQL Spec(具体摘录)

    触发器语法:trigger_time: { BEFORE |之后}

    trigger_time 是触发动作时间。它可以是之前或之后 表示触发器在每一行之前或之后激活 修改。

    •INSERT:只要将新行插入到 桌子;例如,通过 INSERT、LOAD DATA 和 REPLACE 语句。

    这样,在插入行后触发器就会被激活。

    您看到的行为在 MySQL 文档中也有注释

    一个可能令人困惑的例子是 INSERT INTO ... ON DUPLICATE KEY UPDATE ... 语法:BEFORE INSERT 触发器激活 每一行,后跟一个 AFTER INSERT 触发器或两者 BEFORE UPDATE 和 AFTER UPDATE 触发器,取决于是否有 是该行的重复键。

    【讨论】:

    • INSERT: The trigger activates whenever a new row is inserted into the table; ... - 更新的行(由于重复键),或者如果指定了IGNORE 则跳过的行算作插入行?
    • 是的。请参阅 MySQL doc 答案的最后一段摘录;它说For, INSERT INTO ... ON DUPLICATE KEY UPDATE a BEFORE INSERT trigger activates for every row, followed by either an AFTER INSERT trigger or both
    猜你喜欢
    • 2010-10-07
    • 2015-07-30
    • 2023-02-06
    • 1970-01-01
    • 2013-10-03
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多