当前位置: 首页 > 面试题库 >

mysql错误1442的真正原因是什么?

公良奇
2023-03-14
问题内容

嗯,我已经找了很多地方在互联网上的原因mysql error #1442,其称

无法更新存储函数/触发器中的表“ unlucky_table”,因为调用该存储函数/触发器的语句已使用该表

有人说这是mysql中的错误或它没有提供的功能。

MySQL触发器无法操纵分配给它们的表。所有其他主要的DBMS都支持此功能,因此希望MySQL会尽快添加此支持。

有人声称这是由于当您插入一条记录时递归行为
mysql正在做一些锁定操作。您不能在要插入的表的同一行中插入/更新/删除行。因为那样触发器将一次又一次地被调用..最终以递归方式结束

在插入/更新期间,您可以访问NEW对象,该对象包含所涉及表中的所有字段。如果您在插入/更新之前进行编辑,然后在新对象中编辑要更改的字段,它将成为调用语句的一部分,而不是单独执行(消除递归

现在我不明白为什么这是递归的。我有一个案例,其中我有2个表table1table2并且我以

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?

问题答案:

更新表时不能引用该表。

/* my sql does not support this */
UPDATE tableName WHERE 1 = (SELECT 1 FROM tableName)

从MySQL文档:

触发器可以访问其自己的表中的旧数据和新数据。触发器还可以影响其他表,但是不允许修改调用该函数或触发器的语句已经使用(用于读取或写入)的表。(在MySQL
5.0.10之前,触发器无法修改其他表。)



 类似资料:
  • 我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!

  • 我有一个wordpress博客。当我登录到仪表板时,以下异常在顶部突出显示: 从异常消息中,我可以推断它与谷歌分析及其API有关 然而,我很想知道是什么导致了这个异常。此外,我可以采取哪些措施来避免此类例外情况?

  • minecraft 1.8.8的modcoderpack918中的有一个很大的问题。我的Java版本是1.8.0_271-B09。 我不知道我必须做什么。

  • 问题内容: 当我尝试运行程序时,出现以下错误 请帮忙 问题答案: 从Javadoc: 如果Java虚拟机找不到声明为native的方法的适当本机语言定义,则抛出该异常。 这是与JNI相关的错误。loadJacobLibrary试图加载名为jacob-1.14.3-x86的本机库,但在java.library.path定义的路径上找不到该库。启动JVM时,应将此路径定义为系统属性。例如 在Windo

  • 在这里抛出RejectedExecutionException是否有其他原因? java.util.concurrent.RejectedExecutionException:任务java.util.concurrent.FutureTask@4194a5f0被java.util.concurrent.ThreadPoolExecutor@41a36e90拒绝[终止,池大小=0,活动线程=0,排队

  • 问题内容: 尝试使用https连接到服务器时,出现“ HTTPS主机名错误:”错误。我的网址看起来像这样 我使用以下代码进行连接 但是然后得到一个错误 这是过去有效但不再有效的代码。系统体系结构已作了一些更改,但是在与负责人联系之前,我需要获取更多数据。 什么会导致此错误?我可以关闭URLSpoofing检查吗? 问题答案: 似乎domain.com的SSL证书已授予sub.domain.com。