lov*_*esh 6 mysql triggers mysql-error-1442
嗯,我已经找了很多地方在互联网上的原因mysql error #1442,其称
无法在存储的函数/触发器中更新表'unlucky_table',因为它已被调用此存储函数/触发器的语句使用
有人说这是mysql中的一个错误或它没有提供的功能.
MySQL触发器无法操纵它们分配给的表.所有其他主要DBMS都支持此功能,因此希望MySQL能够尽快添加此支持.
有人声称这是由于插入记录时的递归行为 ,mysql正在做一些锁定的东西.你不能插入/更新/删除你插入的同一个表的行..因为然后触发器会一次又一次地调用..最终在一个递归
在插入/更新期间,您可以访问包含所涉及表中所有字段的NEW对象.如果在插入/更新之前执行a并在新对象中编辑要更改的字段,它将成为调用语句的一部分,而不是单独执行(消除递归)
现在我无法理解为什么这是递归的.我在我有2代表的情况下table1和table2与我运行SQL查询如
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interval 2 hour);
Run Code Online (Sandbox Code Playgroud)
现在我有一个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;
Run Code Online (Sandbox Code Playgroud)
现在,当我执行更新查询时,我得到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?
Run Code Online (Sandbox Code Playgroud)
更新表时不能引用该表。
/* my sql does not support this */
UPDATE tableName WHERE 1 = (SELECT 1 FROM tableName)
Run Code Online (Sandbox Code Playgroud)
触发器可以访问其自己的表中的旧数据和新数据。触发器还可以影响其他表,但不允许修改已被调用函数或触发器的语句使用(用于读取或写入)的表。(在MySQL 5.0.10之前,触发器不能修改其他表。)