我希望在用户更新后更新我的行。 例如,如果用户选择32,并且之前输入的Principal是> 1000.然后更新32到40。
CREATE TRIGGER updateusers_id AFTER UPDATE ON Table
FOR EACH ROW
BEGIN
IF(NEW.users_id = 32 AND Table.Principal > 50000) THEN
UPDATE loans SET users_id = 40;
END IF;
END
答案 0 :(得分:1)
考虑一下,你会意识到第一个问题:如果你真正需要的是AFTER
更新触发器...那么BEFORE
更新触发器会做什么?
AFTER UPDATE
表示。您实际需要的是BEFORE UPDATE
- 您希望在表数据实际更改之前在流中段劫持更新,并可能修改实际写入数据库的值。
UPDATE loans SET users_id = 40;
这有两个问题。首先,你知道没有UPDATE
的{{1}}是什么......对吗?它会更新表中的所有行。幸运的是,服务器并没有让你这样做。但解决方案不是添加WHERE
条款 - 它是这样的:
WHERE
IF(NEW.users_id = 32 AND NEW.Principal > 50000) THEN
SET NEW.users_id = 40;
END IF;
pseudotable包含用户尝试使NEW
(触发触发器)写入行的行数据。您处于UPDATE
触发器中,因此设置BEFORE UPDATE ... FOR EACH ROW
值会覆盖用户尝试执行的操作...这似乎是您想要完成的任务。