这是我的触发器:
CREATE TRIGGER update_avatar
BEFORE INSERT ON `tbl_archivos` FOR EACH ROW
UPDATE `tbl_archivos`
SET `is_avatar`='0'
WHERE `tbl_usuarios_id_usuario`=NEW.`tbl_usuarios_id_usuario`
这是错误:
#1442 - Can't update table 'tbl_archivos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我想在上传文件中将状态“is_avatar”更新为0,其中id_usuario =插入的id_usuario。
怎么了?
答案 0 :(得分:0)
错误消息不言自明。 MySQL仍然不允许在您定义触发器的表(在您的情况tbl_archivos
)上发出任何DML语句(插入,更新,删除)。
您唯一能做的就是更改BEFORE
触发器中插入/更新的行的列值。
答案 1 :(得分:0)
它不起作用,因为您在UPDATE
触发器内运行INSERT
- 两个语句都修改同一个表。似乎没有办法在MySQL中使用触发器在激活时循环遍历表中的所有行。
可以更改正在修改的行的列值,查看示例in this question。
解决您的问题(作为变体)可能包括构建一些应用程序来调用某个过程,该过程将以给定的间隔更新表中的数据,或者也可以使用cron作业。