MYSQL 触发更新后如果
MYSQL AFTER Trigger UPDATE IF
我想在用户更新后更新我的行。
例如,如果在用户选择 32 之后,之前输入的主体 > 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
想一想,您会意识到第一个问题:如果您在这里真正需要的是 AFTER
更新触发器...那么 BEFORE
更新触发器会做什么?
AFTER UPDATE
表示更新查询已经改变了行数据。您实际要查找的是 BEFORE UPDATE
——您想在中途劫持更新,在 table 数据实际更改之前,并可能修改将实际写入数据库的值.
UPDATE loans SET users_id = 40;
这有两个问题。首先,您知道没有 WHERE
的 UPDATE
的作用...对吗?它更新 table 中的所有行。幸运的是,服务器不允许您这样做。但解决方案不是添加 WHERE
子句——而是这样的:
IF(NEW.users_id = 32 AND NEW.Principal > 50000) THEN
SET NEW.users_id = 40;
END IF;
NEW
伪table 包含用户试图使 UPDATE
(触发触发器)写入行的行数据。您处于 BEFORE UPDATE ... FOR EACH ROW
触发器中,因此设置 NEW
值会覆盖用户尝试执行的任何操作...这似乎是您想要完成的操作。
我想在用户更新后更新我的行。 例如,如果在用户选择 32 之后,之前输入的主体 > 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
想一想,您会意识到第一个问题:如果您在这里真正需要的是 AFTER
更新触发器...那么 BEFORE
更新触发器会做什么?
AFTER UPDATE
表示更新查询已经改变了行数据。您实际要查找的是 BEFORE UPDATE
——您想在中途劫持更新,在 table 数据实际更改之前,并可能修改将实际写入数据库的值.
UPDATE loans SET users_id = 40;
这有两个问题。首先,您知道没有 WHERE
的 UPDATE
的作用...对吗?它更新 table 中的所有行。幸运的是,服务器不允许您这样做。但解决方案不是添加 WHERE
子句——而是这样的:
IF(NEW.users_id = 32 AND NEW.Principal > 50000) THEN
SET NEW.users_id = 40;
END IF;
NEW
伪table 包含用户试图使 UPDATE
(触发触发器)写入行的行数据。您处于 BEFORE UPDATE ... FOR EACH ROW
触发器中,因此设置 NEW
值会覆盖用户尝试执行的任何操作...这似乎是您想要完成的操作。