我的问题是,我有两个表,每个表都有一个外键到另一个表.每次,我执行包含创建两个表的SQL文件,它给我一个错误,他没有找到另一个表。我使用sqlplus来执行sql文件.下面是我用.NET Framework 2.0试过的一个SQL文件的例子。
create table A(
Age number(3),
name number(3) constraint A_FK references B(name))
/
create table B(
Age number(3) constraint B_FK references A(Age),
name number(3))
即使我把顺序反过来,它也给出了同样的错误.谢谢帮助。
外键所引用的表列必须在创建约束时存在。由于你在表之间有某种循环引用,你需要分三步来做。
首先创建一个没有外键的表
创建第二个表
最后将外键添加到第一个表中,并添加一个 alter table
声明
你还需要引用的列有一个唯一的或主键的约束,否则你会得到错误信息 ORA-02270: no matching unique or primary key for this column-list
.
create table A(
age number(3) primary key,
name number(3)
);
create table B(
age number(3) constraint B_FK references A(Age),
name number(3) primary key
);
alter table A add constraint A_FK foreign key (name) references B(name);
附注:我对你的样本结构很怀疑,但这可能是因为你在问题中过于简化了。
这是一个外键的循环问题。 一种方法是在创建表后添加所有外键(我想其他答案提出的)。
你也可以只对第一个表这样做。
create table A (
Age number(3) primary key,
name number(3)
);
create table B (
name number(3) primary key,
Age number(3),
constraint B_FK foreign key (age) references A(Age)
);
alter table B add constraint A_FK foreign key (name) references B(name);
这里 是一种db<>提琴。
注释。
age number(3) constraint b_fk references a(age)
).它失败了,因为参考表还不存在。
先创建没有键的表。 然后删除其中一个表,用引用表重新创建。 然后删除第二张表,并用引用重新创建。
先创建表,然后在表上添加CONSTRAINT
ALTER TABLE A
ADD FOREIGN KEY (name) REFERENCES B(name);
ALTER TABLE B
ADD FOREIGN KEY (age) REFERENCES A(age);