gpt4 book ai didi

mysql - 数据库多表触发器

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:13 26 4
gpt4 key购买 nike

我有一个具有这种结构的数据库:

  • 用户
    • 编号
    • 用户名
    • ........
    • 用户状态
  • 问题
    • 编号
    • asker_id
    • asked_id
    • ........
    • 问题状态
  • 答案
    • 编号
    • question_id
    • who_answer_id
    • ........
    • answer_status
  • 喜欢
    • 编号
    • liker_id
    • 喜欢的 ID
    • ........
    • like_status

更新user_status = 'deleted'自动设置时如何触发:

question_status = deleted
answer_status = deleted
like_status = deleted

最佳答案

这个触发器有什么作用?

  • 列表项
  • 定义新触发器
  • 检查 user_status 列是否已更新。
  • 检查 user_status 是否更新为“已删除”
  • 获取该用户的 ID,并将其所有问题、答案和点赞的状态更改为“已删除”。

代码:

DELIMITER //
CREATE TRIGGER user_delete BEFORE UPDATE ON users FOR EACH ROW
BEGIN
IF NEW.user_status <> OLD.user_status
THEN
IF STRCMP('deleted',NEW.user_status) = 0 THEN
UPDATE question_status SET question_status = 'deleted' WHERE asker_id = NEW.id;
UPDATE answers SET answer_status = 'deleted' WHERE who_answer_id = NEW.id;
UPDATE likes SET like_status = 'deleted' WHERE liker_id = NEW.id;
END IF;
IF STRCMP('active',NEW.user_status) = 0 THEN
UPDATE question_status SET question_status = 'active' WHERE asker_id = NEW.id;
UPDATE answers SET answer_status = 'active' WHERE who_answer_id = NEW.id;
UPDATE likes SET like_status = 'active' WHERE liker_id = NEW.id;
END IF;
END IF;
END//
DELIMITER ;

您稍后可能会注意到的可能流程

只要考虑一下您网站上的这种情况,问题 A 已经被某些版主“删除”,现在当用户(该问题的发布者)被重新激活时,所有这些经过审核的问题/答案都会回来!

理想情况下,您应该有另一个状态来决定它是自动删除还是手动删除。也许使用“auto_delete”和“delete”而不是仅仅使用“delete”。

关于mysql - 数据库多表触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766176/

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