【问题标题】:Trigger "AFTER INSERT" doesn't work, after insertion if I Add values in tables?如果我在表中添加值,则在插入后触发器“AFTER INSERT”不起作用?
【发布时间】:2019-08-28 22:42:18
【问题描述】:

触发目的:

我应该将该用户的一些数字 50 添加到表 money 中,其中表 paym 中的两个列 table1table2 都不为空。

例如:用户'John' 的两列都不为空,并在表money 中向他添加了50

下表中的示例:

表:paym

 ID        username        table1        Table2  
+-------+-------------+-------------+-----------+
|   1   |  John       |  Value      |    Value  |
+-------+-------------+-------------+-----------+
|   2   |  Alex       |  Null       |    Null   |
+-------+-------------+-------------+-----------+

表:money

 ID      username      total_money      
+-------+-------------+-------------+
|   1   |  John       |     50      | 
+-------+-------------+-------------+
|   2   |  Alex       |     0       |
+-------+-------------+-------------+

下面的触发器,只有在我们一次插入所有表格时才能完美运行。但是,如果您只插入username 两个空表并且在插入之后,如果您将值添加到 emptytable1table2 ,则此时此触发器不起作用!我们能解决这个问题吗??? 即使我们在插入后向表格添加值,触发器也应该工作!

DELIMITER $$
CREATE trigger update_money_after_paym
AFTER INSERT ON paym
FOR EACH ROW
BEGIN
    IF (NEW.table1 IS NOT NULL AND NEW.table2 IS NOT NULL) THEN
        UPDATE money SET total_money = total_money + 50 WHERE username = NEW.username;
    END IF;
END;
$$
DELIMITER;

【问题讨论】:

标签: mysql sql database-trigger


【解决方案1】:

不是那个触发器。它是一个insert 触发器,因此不会为update 调用它。

如果你想要一个update 触发器,那么定义一个:

DELIMITER $$
CREATE trigger update_money_after_paym
AFTER UPDATE ON paym
FOR EACH ROW
BEGIN
    IF (NEW.table1 IS NOT NULL AND NEW.table2 IS NOT NULL) THEN
        UPDATE money m
            SET total_money = total_money + 50
            WHERE m.username = NEW.username;
    END IF;
END;
$$
DELIMITER;

这可能不会完全符合您的要求。例如,您可能只想在前面的值都是 NULL 时添加 50

DELIMITER $$
CREATE trigger update_money_after_paym
AFTER UPDATE ON paym
FOR EACH ROW
BEGIN
    IF (NEW.table1 IS NOT NULL AND NEW.table2 IS NOT NULL AND
        OLD.table1 IS NULL AND old.table2 IS NULL) THEN
        UPDATE money m
            SET total_money = total_money + 50
            WHERE m.username = NEW.username;
    END IF;
END;
$$
DELIMITER;

【讨论】:

  • 谢谢,伙计!!!完美运行!真的很感谢你!!!我刚改成UPDATE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多