触发目的:
我应该向该用户添加一些数字50到表money
中,其中表paym
中的列table1
和table2
都不为空。
例如:用户'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
空两个表并在插入后将其添加到空表table1
和table2
触发器中,则无法正常工作在此刻!我们可以解决这个问题吗???
即使插入后我们向表中添加了值,触发器也应该起作用!
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;
答案 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;