微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决错误代码:1442无法更新存储函数/触发器中的表“customer”,因为它已被调用此存储函数的语句使用

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

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

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
$$

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

DELETE FROM customer
WHERE C_username = 'testuser'

解决方法

是的,触发器不允许您对生成触发器的同一个表进行 INSERT/UPDATE/DELETE,因为这可能会再次运行调用触发器,然后该触发器可能会执行另一个 INSERT/UPDATE/DELETE,等等在。您造成无限循环的可能性太高。

恐怕 MySQL 不支持像 some other brands of SQL database do 这样的“代替”触发器。您不能在执行更新的 DELETE 上触发触发器。

您可以使用 SIGNAL 使其抛出错误,从而阻止 DELETE,但它不会执行 UPDATE。

要实现软删除,您只需让客户端使用 UPDATE 而不是 DELETE。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。