我试图在插入临时表后删除一行,我收到此错误:
INSERT INTO `temp_program_counter` (`id`, `program_id`) values (NULL, '275')
无法在存储的函数/触发器中更新表'temp_program_counter',因为它已被调用此存储函数/触发器的语句使用。
这是我的触发器:
DELIMITER $$
DROP TRIGGER IF EXISTS `testtemp`$$
CREATE
TRIGGER `testtemp` AFTER INSERT ON `temp_program_counter`
FOR EACH ROW BEGIN
UPDATE `program` SET `view_count`=`view_count`+1;
DELETE FROM `temp_program_counter` WHERE id=new.id;
END;
$$
DELIMITER ;
这个表是一个临时表,它有延迟获取数据,接收后必须更新主表并从temp中删除。 谢谢你提前帮忙。
答案 0 :(得分:2)
您可能已经以某种方式解决了这个问题,但无论如何我都会发布答案:
您不能引用在触发器中触发触发器的同一个表(或触发器和存储过程的组合)。这可能意味着一个无限循环,因此sql通过提供该错误来阻止它,导致始终存在相同的错误。
答案 1 :(得分:0)
尝试插入之前 因为,您尝试删除刚刚插入但可能尚未在此会话中提交的记录。因此,您收到了错误。
如果您使用BEFORE INSERT,则会删除表中id = new.id的所有其他记录,并且将成功插入新记录。
DELIMITER $$
DROP TRIGGER IF EXISTS `testtemp`$$
CREATE
TRIGGER `testtemp` BEFORE INSERT ON `temp_program_counter`
FOR EACH ROW BEGIN
UPDATE `program` SET `view_count`=`view_count`+1;
DELETE FROM `temp_program_counter` WHERE id=new.id;
END;
$$
DELIMITER ;