是的,FOR EACH ROW是原子的。在每次更新操作中,FOR EACH ROW触发器都会对每个受影响的行进行操作。下面是一个示例触发器,它在每次更新mytable表的行时记录修改的用户ID和时间戳:
CREATE TRIGGER log_changes
AFTER UPDATE ON mytable
FOR EACH ROW
BEGIN
INSERT INTO change_log
(user_id
, timestamp
, message
)
VALUES (NEW.user_id, NOW(), CONCAT('Row ID ', NEW.id, ' updated.'));
END
在每次更新mytable表的行时,触发器将会把修改过的行的用户ID和时间戳插入到change_log表中。因为FOR EACH ROW是原子的,所以触发器会对每个受影响的行都执行一次插入操作。