删除r_report8记录时如何同步将rjob_header的report_item7置0或空?
实现删除r_report8记录时同步更新rjob_header的report_item7字段
要解决这个问题,你需要在r_report8表上创建一个AFTER DELETE触发器,当该表的记录被删除时,自动将rjob_header中对应关联记录的report_item7字段更新为0或NULL。
具体实现步骤
- 确认两张表的关联字段:比如假设
r_report8和rjob_header通过job_id字段关联(请替换成你实际的关联字段,如订单ID、任务ID等)。 - 根据数据库类型创建对应的触发器,以下是主流数据库的示例代码:
MySQL 示例
DELIMITER // CREATE TRIGGER trg_rreport8_delete_sync_rjobheader AFTER DELETE ON r_report8 FOR EACH ROW BEGIN -- 将对应记录的report_item7设为0,如需设为NULL则替换为NULL UPDATE rjob_header SET report_item7 = 0 WHERE rjob_header.job_id = OLD.job_id; -- 替换为实际关联字段 END // DELIMITER ;
PostgreSQL 示例
-- 先创建触发函数 CREATE OR REPLACE FUNCTION sync_rjobheader_after_delete() RETURNS TRIGGER AS $$ BEGIN UPDATE rjob_header SET report_item7 = 0 -- 如需设为NULL则替换为NULL WHERE rjob_header.job_id = OLD.job_id; -- 替换为实际关联字段 RETURN NULL; END; $$ LANGUAGE plpgsql; -- 创建触发器 CREATE TRIGGER trg_rreport8_delete_sync_rjobheader AFTER DELETE ON r_report8 FOR EACH ROW EXECUTE FUNCTION sync_rjobheader_after_delete();
关键注意事项
- 必须替换代码中的
job_id为两张表实际的关联字段,否则无法匹配到目标记录。 - 若需要将
report_item7设为NULL,直接把SET report_item7 = 0修改为SET report_item7 = NULL即可。 - 确保创建触发器的用户拥有
rjob_header表的UPDATE权限,以及r_report8表的触发器创建权限。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

