【问题标题】:Mysql: Trigger on duplicate key update not workingMysql:触发重复键更新不起作用
【发布时间】:2014-08-28 08:33:26
【问题描述】:

我正在尝试创建一个触发器,该触发器将在重复密钥更新时触发,但它不起作用。这个想法是,在每次重复键更新时,我想复制历史表中更新行的旧内容。

    INSERT INTO t1 
            (
                w1,
                w2
            )
            Select
                w1, 
                w2
            from t2
            on duplicate key update
                w2 = IF(values(w2) is not null and values(w2) != "", VALUES(w2), t1.w2);

还有触发器:

drop trigger if trigger1;
DELIMITER $$

CREATE
    TRIGGER trigger1 before update ON t1
    FOR EACH ROW 
    BEGIN
        INSERT INTO history_table
        (
            w1, -- this is primary key
            w2
        ) 
        values(
            old.w1,
            old.w2
        );


    END$$

DELIMITER ;

有没有人知道如何让它工作,如果可能的话。

我试图让触发器在插入之前启动,但它不起作用。

谢谢

【问题讨论】:

  • 我怀疑捕获这个的唯一方法可能是AFTER UPDATE 触发器。运行的BEFORE 触发器将始终为BEFORE INSERT,并且从技术上讲,BEFORE 触发器应在服务器发现重复密钥违规之前触发。

标签: mysql triggers sql-update sql-insert


【解决方案1】:

如果您在 history_table.w1 上有主键,并且您为 w1=1 进行了一次更新,则由于“重复条目”错误,不会记录 w1=1 的下一次更新

【讨论】:

  • 历史表中没有主键,也没有记录任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2016-01-10
相关资源
最近更新 更多