You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器设置外键为null问题:软删除分类后仅更新对应FAQ行

问题解决:软删除分类时同步置空关联FAQ的分类ID

你的触发器逻辑出错在WHERE条件上:WHERE faq.faq_category_id = faq_category_id 里的faq_category_id没有明确指向被更新的分类ID,MySQL会将其解析为faq表自身的字段,导致所有faq_category_id不为NULL的行都被匹配,最终全部置空。

修正后的触发器代码如下:

DELIMITER //
CREATE TRIGGER _set_faq_foreign_key_to_null
AFTER UPDATE ON faq_category 
FOR EACH ROW
BEGIN
    -- 仅在分类从未删除变为软删除状态时执行
    IF OLD.deleted_at IS NULL AND NEW.deleted_at IS NOT NULL THEN
        UPDATE faq 
        SET faq.faq_category_id = NULL
        WHERE faq.faq_category_id = NEW.faq_category_id;
    END IF;
END; //
DELIMITER ;

关键修改点:

  • 优化触发条件:从判断deleted_at是否变化,改为精准判断从未删除状态(OLD.deleted_at为NULL)变为软删除状态(NEW.deleted_at不为NULL),避免分类恢复删除时误操作。
  • 修正WHERE子句:用NEW.faq_category_id指定当前被标记删除的分类ID,确保仅关联该分类的FAQ行被置空。

内容的提问来源于stack exchange,提问作者D.B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:27:22