首页 > 数据库 > mysql教程 > 为什么我无法更新 MySQL 存储函数或触发器中的表?

为什么我无法更新 MySQL 存储函数或触发器中的表?

Linda Hamilton
发布: 2024-12-25 00:05:20
原创
819 人浏览过

Why Can't I Update a Table Within a MySQL Stored Function or Trigger?

MySQL 错误:无法更新存储函数/触发器中的表

问题:

尝试使用触发器向MySQL表中插入新行时,出现以下错误发生:

Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
登录后复制

答案:

当 INSERT 触发器尝试修改调用它的表时,会遇到此错误。 MySQL 禁止这种行为有两个主要原因:

  • 锁定冲突: INSERT 可能会执行锁定操作,如果触发器也尝试锁定表,则可能导致死锁。
  • 无限递归:如果触发器更新同一个表中的一行,它可以导致同一触发器无限期地触发,从而导致无限循环。

要解决此错误,请考虑使用以下方法:

  • 访问新值: 不要在触发器中修改表,而是使用 NEW.fieldname 访问新插入的值并设置其他字段
  • 预插入修改: 使用 BEFORE INSERT 触发器在将值插入表之前修改值。这可以避免无限递归问题。

例如,要从全名的前两个字符创建短名称字段,可以使用以下 BEFORE INSERT 触发器:

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 存储函数或触发器中的表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板