我有这些表:
event (evt_id,evt_code,reg_id) magnitude (mag_id,evt_id,value) trace (trace_id,pt_id) point (pt_id,evt_id)
我想从与evt_id = 1139相关的所有表中删除所有行.
我该怎么做?
解决方法
如果您可以控制模式,我将使模式使用
cascading deletes.
从文章(为您的例子翻译更相关的部分)
CREATE TABLE point ( pt_id integer PRIMARY KEY,evt_id integer REFERENCES event ON DELETE CASCADE )
如果您设置了级联,则可以从主事件表中删除,所有其他表将自动清除
否则,首先需要删除所有引用,然后删除主表.您应该在一个事务中执行此操作以保持数据一致
BEGIN; DELETE FROM trace WHERE EXISTS (SELECT 1 FROM point WHERE evt_id = 1139 AND trace.pt_id = point.pt_id); DELETE FROM point where evt_id = 1139; DELETE FROM magnitude where evt_id = 1139; DELETE FROM event where evt_id = 1139; COMMIT;