简短的回答是,你不能。也就是说,您不能在不将记录插入Table_B 的情况下将记录插入Table_A。
面试官可能希望的是什么:
鉴于我们需要同时向两个表中插入记录,我们可以这样做吗?
不:insert all 语法将在 ORA-02291: integrity constraint WHATEVER_FK) violated - parent key not found 上失败
insert all
into table_a values (n1, n2)
into table_b values (n2, n1)
select 23 as n1
, 42 as n2
from dual
/
解决方法是更改外键,使其被延迟:
alter table table_a add constraint ab_fk foreign key (col2)
references table_b (col4) INITIALLY DEFERRED DEFERRABLE;
alter table table_b add constraint ba_fk foreign key (col3)
references table_a (col1) INITIALLY DEFERRED DEFERRABLE;
正确答案(虽然只推荐给最有把握的候选人):
您为什么要问我有关损坏的数据模型的问题?如果我加入贵公司,这是否表明我将从事的工作?
因为这是一个完全错误的情况。这两个外键的作用是在table_a 和table_b 之间建立1:1 的关系。那么为什么它们是两个单独的表呢?让他们成为一个,问题就消失了。这达到了同样的效果:
alter table table_a add constraint ab_uk unique (col2);
drop table table_b;
假设确实需要两张表(即,如果列数多于本示例中出现的列数),则选择一张表作为父表,另一张表作为子表。因为一旦我们以这种方式表达模型,我们就会明白为什么它如此错误:没有孩子是自己的父母,即使在最扭曲的科幻故事中也是如此。