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

时间:2019-04-07 18:24:51

标签: mysql sql database-trigger

触发目的:

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

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

下表中的示例:

表: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空两个表并在插入后将其添加到table1table2触发器中,则无法正常工作在此刻!我们可以解决这个问题吗??? 即使插入后我们向表中添加了值,触发器也应该起作用!

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;

1 个答案:

答案 0 :(得分:0)

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

这可能无法完全满足您的要求。例如,您可能只想在先前的值均为50时添加NULL

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;