我希望在更新表后触发。在此表上执行更新查询时,我想对其他表进行更改。所以,我需要知道受影响的行数是否大于0。
确切情况:
Table: table_user
userid (primary key)
no_changes_status (true means no update has been made on table_website for this userid)
Table: table_website
userid (reference key)
website_url (when the value of this field is changed, no_changes_status should be set to false)
我想在table_website上触发,它会检查每次插入和更新的 number_of_affected_rows 。如果 number_of_affected_rows大于0 ,则触发器会将no_changes_status设为false。
我无法找到任何可用于确定触发器的 number_of_affected_rows 的语法/功能。
其他人在MySQL forum提出了几乎相同的问题
答案 0 :(得分:3)
这不能在更新触发器中完成,因为每行都会调用它。
我希望你有一个用户定义的程序来执行此更新,如果没有,那么我建议你创建一个这样的proc。
在此过程中,运行更新查询后,您可以使用
获取受影响的行数SELECT ROW_COUNT();
您可以将其用于进一步处理。 RowCount()
manual
希望这有帮助。
答案 1 :(得分:0)
由于触发器基于行(FOR EACH ROW...
)运行,因此无法实现。您必须首先执行SELECT
并查看将受影响的行数,然后执行任何必要的操作。在代码中解决它,而不是在触发器中解决。
编辑:
如果它只是一行,你可以做类似的事情:
DELIMITER $$
CREATE TRIGGER testref BEFORE INSERT ON table_website
FOR EACH ROW BEGIN
SELECT @aff_rows:=COUNT(*) FROM table_website WHERE yourCondition = sameConditionUsedForYourInsert
AND (
OLD.col1 != NEW.col1 OR
OLD.col2 != NEW.col2 ...);
IF @aff_rows > 0 THEN
UPDATE table_user SET no_changes_status = whatever WHERE whatever;
END IF;
END;
$$
DELIMITER ;