【问题标题】:How can I Update column value to Old value plus New value from other table using Trigger?如何使用触发器将列值更新为旧值加上其他表中的新值?
【发布时间】:2013-08-07 17:45:49
【问题描述】:

如果该值已经有一个条目,我如何使用触发器将列值更新为旧值加上来自其他表的新值? 我想要的是类似下面的东西。注意粗体和斜体部分。

DELIMITER$$
CREATE TRIGGER trigger_name AFTER INSERT
ON table_one FOR EACH ROW
BEGIN
  INSERT INTO table_two(clmn_id, clmn_one) VALUES(NEW.clmn_id_fk,NEW.clmn_a)
  ON DUPLICATE KEY UPDATE clmn_one = VALUES(clmn_one + NEW.clmn_a);
END$$
DELIMITER;

【问题讨论】:

    标签: mysql sql triggers sql-update


    【解决方案1】:

    尝试从 ON DUPLICATE KEY 中删除关键字 VALUES:

    DELIMITER$$
    CREATE TRIGGER trigger_name AFTER INSERT
    ON table_one FOR EACH ROW
    BEGIN
      INSERT INTO table_two(clmn_id, clmn_one) VALUES(NEW.clmn_id_fk,NEW.clmn_a)
      ON DUPLICATE KEY UPDATE fine_amount = clmn_one + NEW.clmn_a;
    END$$
    DELIMITER;
    

    【讨论】:

    • 对于更新它工作正常,但现在它不能用于插入新值。
    • 您遇到了什么问题?
    • 除非是更新,否则它根本不会插入新值。即,如果 id 不存在,则不会影响任何行。
    • 如果我为该列设置默认值,它会正常工作。
    【解决方案2】:

    看起来您首先需要一个 select 语句来检查它是否已经存在。如果是这样,请将变量设置为当前值,然后运行结合旧值(变量)和新值的更新。如果记录尚不存在,请使用当前值运行插入语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多