首页 > 数据库 > mysql教程 > 如何解决 MySQL 触发器中的'无法更新表...因为它已被使用”错误?

如何解决 MySQL 触发器中的'无法更新表...因为它已被使用”错误?

Patricia Arquette
发布: 2024-12-27 18:51:13
原创
818 人浏览过

How to Resolve

更新表时触发中断:解决问题

在数据库编程中,有时需要使用触发器更新表的列对同一个表进行更新操作。但是,如果触发器在表已更新时尝试更新表,则可能会导致错误。

考虑以下触发器:

CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score
FOR EACH ROW
    UPDATE
        products_score 
    SET
        products_score.votes_total =
            (SELECT
                 (votes_1 + votes_2 + votes_3 + votes_4 + votes_5)
             FROM
                 products_score
             WHERE
                 id = new.id)
登录后复制

当使用以下命令执行更新操作时此触发器,错误“#1442 - 无法更新存储函数/触发器中的表'products_score',因为它已被调用此存储函数/触发器的语句使用”遇到。

要解决此问题,请将触发时间更改为 BEFORE 而不是 AFTER。这允许触发器在更新操作之前执行,避免表在更新期间被锁定。更新后的触发器应如下所示:

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score
FOR EACH ROW
BEGIN
    SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5
END
;
登录后复制

使用此修改后的触发器,表的列可以在更新操作后成功更新。

以上是如何解决 MySQL 触发器中的'无法更新表...因为它已被使用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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