如果我在表中添加值,插入后触发器 "AFTER INSERT" 不起作用?

Trigger "AFTER INSERT" doesn't work, after insertion if I Add values in tables?

触发器的用途:

我应该在 table money 的 table paym 两列 table1table2 中为该用户 + 添加一些数字 50 ] 不为空。

例如:用户 'John' 的两列都不为空,并且在 table money.

中添加了 50

下面 table 中的示例:

table: paym

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

Table: money

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

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

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;

不是那个触发器。它是一个 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;