首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误代码: 1442。无法更新存储函数/触发器中的表'customer‘,因为它已被调用此存储函数的语句使用

错误代码: 1442。无法更新存储函数/触发器中的表'customer‘,因为它已被调用此存储函数的语句使用
EN

Stack Overflow用户
提问于 2021-04-23 06:01:49
回答 1查看 341关注 0票数 1

我正在编写一个查询,它使用名为"IsDelete“的标志创建触发器来软删除表customer中的一行。当标志为'0‘时,它不会被删除,而当标志变为1时,行已被标记为已删除。

运行查询时,会生成错误代码1442c。有人能解释一下为什么吗??

代码语言:javascript
复制
DELIMITER $$

CREATE TRIGGER SOFT_DELETE_TRIGGER
BEFORE DELETE ON customer
FOR EACH ROW 
BEGIN
    IF OLD.IsDelete = 0 THEN
        CALL cannot_delete_error;
        UPDATE customer
        SET IsDelete = 1;
    END IF;
END
$$

删除表中的一行以测试触发器。

代码语言:javascript
复制
DELETE FROM customer
WHERE C_username = 'testuser'
EN

回答 1

Stack Overflow用户

发布于 2021-04-23 06:23:55

是的,触发器不允许您对生成触发器的同一个表执行INSERT/UPDATE/DELETE操作,因为运行该触发器可能会再次调用触发器,然后该触发器可能会执行另一个INSERT/UPDATE/DELETE,依此类推。您有太高的机会导致无限循环。

恐怕MySQL不支持像some other brands of SQL database do那样的"instead of“触发器。您不能在执行更新的DELETE上创建触发器。

您可以使用SIGNAL让它抛出一个错误,这会阻止删除,但它不会进行更新。

要像现在这样实现软删除,只需让客户端使用UPDATE而不是DELETE即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67221363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档