[英]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.