繁体   English   中英

在 sql 文件中创建带有外键的表到下面创建的另一个表

[英]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);

DB Fiddle 上的演示

旁注:我对您的示例结构非常怀疑,但这可能是因为您在问题中过度简化了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM