我有一个由四个表组成的数据库。关系模式如下图所示:
以下是行:
现在我正在尝试删除拥有者ID为OW1
的所有者。因为id是所有者表中的主键和其他表中的外键所以它不允许我删除该行。这是我试过的SQL:
delete from owners
where ownerid = 'OW1' and petid = 'PT1'
它返回:
ORA-02292: integrity constraint (TEST_1.ADDRESSES_OWNERS_FK) violated - child record found
我不允许在关系图中将删除规则设置为“CASCADE”。 请帮忙:(
答案 0 :(得分:4)
好吧,如果匿名块计为一个语句,只需将删除包装在一个块中:
begin
delete from addresses where ownerid = 'OW1';
delete from contacts where ownerid = 'OW1';
delete from pets where ownerid = 'OW1';
delete from owners where ownerid = 'OW1';
end;
/
SQL Fiddle。看起来有点像作弊,但如果这些是你已经给予的条件......
答案 1 :(得分:3)
有时候,找出哪些子引用表拒绝从父表中删除数据很麻烦。在这种情况下,我们可以使用此查询找到对主表的引用。
select * from
all_constraints where
r_constraint_name in
(select constraint_name from all_constraints
where table_name= '<PARENT_TABLE_NAME>');
通过浏览结果列表,可以轻松找到参考。希望对您有所帮助。