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

医院数据库After Update触发器配置:如何关联patient_id实现删除?

解决医院数据库触发器:出院时清除患者疾病记录

嘿,我来帮你搞定这个触发器的问题!你的思路完全没问题,只需要两个小调整就能让它正常工作:

关键修正点

  1. 判断NULL的正确方式:在SQL里,不能用!= NULL来判断非空值,得用IS NOT NULL——因为NULL是特殊值,普通的比较运算符对它无效。
  2. 获取更新行的patient_id:在UPDATE触发器里,NEW关键字代表更新后的行数据,所以你可以直接用NEW.patient_id拿到当前更新的visit记录对应的患者ID,然后用它来匹配p_d表的记录。

完整修正后的触发器代码

USE hospital;
DROP TRIGGER IF EXISTS cure_patient;
DELIMITER //
CREATE TRIGGER cure_patient AFTER UPDATE ON visit
FOR EACH ROW
BEGIN
    -- 仅当check_out_date从NULL变为实际日期时执行删除
    IF NEW.check_out_date IS NOT NULL AND OLD.check_out_date IS NULL THEN
        DELETE FROM p_d 
        WHERE p_d.patient_id = NEW.patient_id;
    END IF;
END; //
DELIMITER ;

额外说明

  • 我加了OLD.check_out_date IS NULL的判断,这样只会在第一次把check_out_date从NULL设置为日期的时候触发删除,避免后续修改出院日期时重复删除(毕竟患者出院后再改出院日期不应该再次删除疾病记录)。
  • 注意你的p_d表实际名称是p_d,不是代码里写的patient_disease,我已经修正了这个表名。
  • 这个触发器是AFTER UPDATE且FOR EACH ROW,所以每更新一条visit记录都会触发一次,完全符合你“患者出院即痊愈”的业务逻辑。

内容的提问来源于stack exchange,提问作者Vendell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:23:57