gpt4 book ai didi

mysql - 在不调用触发器的情况下在 mysql 中进行查询(如何禁用触发器)

转载 作者:IT老高 更新时间:2023-10-29 00:10:50 24 4
gpt4 key购买 nike

我有 2 个表格:commentscomments_likes


评论

id     
message
likes

触发器:

删除后

DELETE FROM comments_likes WHERE comment_id = OLD.id;

comments_likes

id        
comment_id

触发器:

插入后

UPDATE comments SET likes = likes + 1 WHERE comments.id = NEW.comment_id;

删除后

UPDATE comments SET likes = likes - 1 WHERE comments.id = OLD.comment_id;

更新后

**omited code, updates comments**

所以问题是,我可以在从另一个触发器激活触发器时禁用触发器吗?

我想要的是做这样的事情:

删除后

IF NOT called_from_another_trigger() THEN
UPDATE comments SET likes = likes - 1 WHERE comments.id = OLD.comment_id;
END IF;

[编辑]

一个未优化的解决方案是(非常慢的查询...对每个 LIKE 寄存器进行查询):

BEGIN
IF (SELECT id FROM comments WHERE comments.id = OLD.comment_id) THEN
UPDATE comments SET comments.cache_likes = comments.cache_likes - 1 WHERE comments.id = OLD.comment_id;
END IF;
END

UPDATE LOW PRIORITYIGNORE 不起作用。

[编辑 2]

我还有一个想法,是否可以在第一个触发器中设置一个全局变量并从另一个触发器中读取?

例如:

第一次触发:

@disable_triggers = true;
// do the stuff that calls another triggers
@disable_triggers = false;

其他触发器:

if @disable_triggers = false then
// do the stuff
end if;

最佳答案

要禁用触发器,您可以执行以下操作:

触发器 1

SET @disable_trigger = 1;
// do stuff that calls trigger 2
SET @disable_trigger = NULL;

触发器 2

IF @disable_trigger IS NULL THEN
// do stuff only if called from a query and not from trigger 1
END IF;

关于mysql - 在不调用触发器的情况下在 mysql 中进行查询(如何禁用触发器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com