簡體   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