医院数据库After Update触发器配置:如何关联patient_id实现删除?
解决医院数据库触发器:出院时清除患者疾病记录
嘿,我来帮你搞定这个触发器的问题!你的思路完全没问题,只需要两个小调整就能让它正常工作:
关键修正点
- 判断NULL的正确方式:在SQL里,不能用
!= NULL来判断非空值,得用IS NOT NULL——因为NULL是特殊值,普通的比较运算符对它无效。 - 获取更新行的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
相关产品推荐
相关产品推荐

