如果我在表中添加值,插入后触发器 "AFTER INSERT" 不起作用?
Trigger "AFTER INSERT" doesn't work, after insertion if I Add values in tables?
触发器的用途:
我应该在 table money
的 table paym
两列 table1
和 table2
中为该用户 + 添加一些数字 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 table1
和 table2
触发器此时不起作用!我们能解决这个问题吗???
即使我们在插入后向 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;
触发器的用途:
我应该在 table money
的 table paym
两列 table1
和 table2
中为该用户 + 添加一些数字 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 table1
和 table2
触发器此时不起作用!我们能解决这个问题吗???
即使我们在插入后向 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;