插入时的MySql触发器(错误)

时间:2013-12-03 04:08:04

标签: mysql triggers insert

这是我的触发器:

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。

怎么了?

2 个答案:

答案 0 :(得分:0)

错误消息不言自明。 MySQL仍然不允许在您定义触发器的表(在您的情况tbl_archivos)上发出任何DML语句(插入,更新,删除)。

您唯一能做的就是更改BEFORE触发器中插入/更新的行的列值。

答案 1 :(得分:0)

它不起作用,因为您在UPDATE触发器内运行INSERT - 两个语句都修改同一个表。似乎没有办法在MySQL中使用触发器在激活时循环遍历表中的所有行。

可以更改正在修改的行的列值,查看示例in this question

解决您的问题(作为变体)可能包括构建一些应用程序来调用某个过程,该过程将以给定的间隔更新表中的数据,或者也可以使用cron作业。