当前位置: 首页 > 知识库问答 >
问题:

MySql错误:无法更新存储函数/触发器中的表,因为调用此存储函数/触发器的语句已经使用了该表

谷梁建中
2023-03-14

我正在运行一个MySQL查询。但当从表单输入中添加新行时,我会得到以下错误:

Error: Can't update table 'brandnames' in stored function/trigger because it is 
already used by statement which invoked this stored function/trigger.

从代码:

CREATE TRIGGER `capital` AFTER INSERT ON `brandnames`
FOR EACH
ROW UPDATE brandnames
SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )

这个错误意味着什么?

共有2个答案

邹学民
2023-03-14

正确的语法是:

FOR EACH ROW SET NEW.bname = CONCAT( UCASE( LEFT( NEW.bname, 1 ) )
                                   , LCASE( SUBSTRING( NEW.bname, 2 ) ) )
赵奕
2023-03-14

在INSERT触发器触发时不能更改表。INSERT可能会执行某些锁定操作,从而导致死锁。此外,从触发器更新表将导致相同的触发器在无限递归循环中再次触发。这两个原因都是MySQL阻止您这样做的原因。

但是,根据您试图实现的目标,您可以使用new.fieldname访问新值,或者使用old访问旧值(如果进行更新的话)。

如果您有一个名为full_brand_name的行,并且希望将前两个字母用作字段small_name中的简称,则可以使用:

CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2)))
END
 类似资料:
  • 问题内容: 我正在运行MySQL查询。但是,当从表单输入添加新行时,出现此错误: 从代码: 这个错误是什么意思? 问题答案: INSERT触发器触发时,您无法更改表。INSERT可能会进行一些锁定,这可能导致死锁。同样,从触发器更新表将导致同一触发器在无限递归循环中再次触发。这两个原因都是MySQL阻止您执行此操作的原因。 但是,根据要实现的目标,您可以使用NEW.fieldname甚至旧值(如果

  • 问题内容: 我有一个想要的表:更新该表后,该表的2个字段(标题和描述)会发生变化,并从另一个表中获取价值 这是我的触发器: 我的表: trade_request_type trade_request 错误: 错误1442:无法更新存储函数/触发器中的表’trade_request’,因为调用该存储函数/触发器的语句已使用该表。 这没用!什么是概率? 问题答案: 使用检查null值。 要更改更新后的

  • 问题内容: 我正在使用MySQL和Engine InnoDB。我有一个SQL表(简体),其中包含4列,如您在这张图片中看到的: 当需求的状态变为“完成”时,我希望其优先级为空,并且所有具有上述优先级的需求都将递减。 例如,如果第二个需求:“面包”为“完成”,则其优先级将设置为空,并且我希望“黄油”的优先级为2,“果酱”的优先级为3。 我有这个触发条件: 但是,当我从“进行中”到“完成”的状态编辑行

  • Azure函数存储帐户Blob容器触发器 在我们的一个用例中,我正在为具有以下条件的存储帐户容器中的任何活动寻找Azure函数触发器 < li >具有特定命名约定的容器(名称如xxxx-input) < li >它应该自动检测是否创建了新的容器(具有特定的命名约定) < li>

  • 在quartz中引用删除触发器 我遇到了同样的问题:无法存储名称为“Scheduler JobTrigger”且组为“Group1”的触发器,因为已存在具有此标识的触发器。 谢谢,请帮忙! 在尝试上述场景之前,即使我用不同的schedule@scheduler.scheduleJob(job,trigger)调度一个新作业;它给了我一个例外:无法存储名称为“Scheduler JobTrigger

  • 本文向大家介绍oracle 存储过程、函数和触发器用法实例详解,包括了oracle 存储过程、函数和触发器用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下: 一、存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 创建存储过程 用CREATE PROCEDURE命令建立存储