[英]Create table with foreign key to an other table created below in sql file
我的问题是我有两个表,每个表都有另一个表的外键。 每次,我执行包含创建两个表的 SQL 文件,它给我一个错误,他没有找到另一个表。 我正在使用 sqlplus 执行 sql 文件。 这是我尝试使用的 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))
即使我颠倒顺序,它也会给出同样的错误。 感谢帮助。
这是外键循环的问题。 一种方法是在创建表后添加所有外键(正如我认为其他答案所建议的那样)。
您也可以对第一个表执行此操作:
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<>fiddle。
笔记:
age number(3) constraint b_fk references a(age)
)。它失败了,因为参考表还不存在。
首先创建没有键的表。 然后删除一个并使用参考重新创建它。 然后删除第二个并使用参考重新创建它。
首先创建表,然后添加约束
ALTER TABLE A
ADD FOREIGN KEY (name) REFERENCES B(name);
ALTER TABLE B
ADD FOREIGN KEY (age) REFERENCES A(age);
外键引用的表列在创建约束时必须存在。 由于表之间存在某种循环引用,因此您需要分三个步骤执行此操作:
首先创建一个没有外键的表
创建第二个表(使用它的外键)
最后使用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);
旁注:我对您的示例结构非常怀疑,但这可能是因为您在问题中过度简化了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.