好吧,我已经在互联网上寻找了很多地方的原因,mysql error #1442
其中说
无法更新存储函数/触发器中的表“unlucky_table”,因为它已被调用此存储函数/触发器的语句使用
有人说这是 mysql 中的错误或它不提供的功能。
MySQL 触发器无法操作分配给它们的表。所有其他主要的 DBMS 都支持此功能,因此希望 MySQL 将很快添加此支持。
有人声称这是由于 插入记录时的递归行为 mysql 正在执行一些锁定操作。你不能插入/更新/删除你插入的同一个表的行..因为那样触发器会一次又一次地调用..以递归结束
在插入/更新期间,您可以访问包含相关表中所有字段的 NEW 对象。如果您在插入/更新之前执行并编辑要在新对象中更改的字段,它将成为调用语句的一部分,而不是单独执行(消除递归)
现在我不明白为什么这是递归的。我有一个案例,我有 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?