我正在编写一个查询,它使用名为"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'发布于 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即可。
https://stackoverflow.com/questions/67221363
复制相似问题