如果子记录不存在则删除父记录CONSTRAINT PostgreSQL

时间:2017-03-24 17:18:12

标签: sql postgresql constraints delete-row

我正在创建一个小型数据库来存储有关酒店预订和客户的信息。

我想这样做,只有在酒店房间没有预订的情况下才能删除房间表中的房间记录。

我试图解决问题的方法是:

FOREIGN KEY (hid, room) REFERENCES room (hid, num) 
ON DELETE CASCADE WHEN NOT EXISTS(hid AND room)

但它不起作用。

有谁知道我做错了什么以及如何解决它?

CREATE TABLE booking( hid CHAR(4) NOT NULL, 
cid CHAR(4) NOT NULL,    
dstart DATE NOT NULL,    
ndays DATE,    
room INTEGER,     
PRIMARY KEY(hid, cid, dstart), 
FOREIGN KEY (cid) REFERENCES customer (cid)    
ON UPDATE CASCADE    
ON DELETE CASCADE,    
FOREIGN KEY (hid, room) REFERENCES room (hid, num)    
ON DELETE CASCADE WHEN NOT EXISTS(hid AND room)    
);

1 个答案:

答案 0 :(得分:0)

您需要为每个外键关系定义一个删除规则。

例如,如果作为子记录存在预订应该防止删除,那么使用ON DELETE RESTRICT,如果您没有明确说明,也是默认规则。 ON DELETE规则没有其他参数:您无法尝试的EXISTS子句。