嗯,我已经找了很多地方在互联网上的原因mysql error #1442
这说
因为它已经被用于通过调用这个存储函数/触发语句存储函数/触发无法更新表“unlucky_table”
有人说,这是MySQL的错误,还是一个一个特点,它不提供。
MySQL的触发器不能操纵他们被分配到表中。 所有其他主要DBMS支持此功能,所以希望MySQL将很快添加这种支持。
有人声称,这是由于递归的行为,当你插入一条记录MySQL是做一些锁的东西。 你不能插入/更新/删除您插入同一个表的行..因为那么触发器将一次又一次地叫。在递归结束了
在插入过程中/更新您可以访问它包含了所有在所涉及的表中的字段的新对象。 如果你插入/更新之前做和编辑要在新的对象更改的字段(S)将成为调用语句的一部分,而不是被作为单独(消除递归)执行
现在我无法理解为什么这是递归的。 我在我有2和表的情况下, table1
和table2
以及我运行SQL查询如
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interval 2 hour);
现在我有一个after update trigger
上table1
为
CREATE TRIGGER trig_table1 AFTER UPDATE ON table1
FOR EACH ROW begin
if old.avail=1 and new.avail=0 then
delete from table2 where id=new.id;
end if;
现在,当我执行更新查询,我收到了1442错误。 什么递归在这种情况下?
is this error a lack of feature in mysql?
OR
does this have to do with how mysql executes queries?
OR
is there something logically wrong with executing such queries?