Oracle 中的外键创建问题
Posted
技术标签:
【中文标题】Oracle 中的外键创建问题【英文标题】:Foreign Key Creation issue in Oracle 【发布时间】:2015-05-25 00:54:57 【问题描述】:当我尝试创建这两个表时,我得到:
“SQL 错误:ORA-00904:“COLLECTIBLENUM”:标识符无效”
我确定这是一个菜鸟错误,但我只是没有看到它。有人可以指出我做错了什么吗?提前致谢。
CREATE TABLE Collectibles(
CollectibleNum Number(10) NOT NULL,
CONSTRAINT collectibles_pk PRIMARY KEY(CollectibleNum));
Create table DiecastItems(
DiecastName VARCHAR2(45) NOT NULL,
DiecastCopy NUMBER(2) NOT NULL,
DiecastScale VARCHAR2(25),
ColorScheme VARCHAR2(25),
DiecastYear NUMBER(4),
CONSTRAINT diecastItem_pk PRIMARY KEY(DiecastName, DiecastCopy),
CONSTRAINT diecastItem_Collectible_fk FOREIGN KEY(CollectibleNum) REFERENCES Collectibles(CollectibleNum));
【问题讨论】:
【参考方案1】:当您添加 FK 时,您正在将正在创建的表中的列作为子列链接到父表中的 父列。因此,您需要提供子列名称以及父列名称。
一般语法是
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
请注意,FOREIGN KEY
括号之间的列来自您正在创建的表,而REFERENCES PARENT_TABLE
之间的列来自父表。
您的DiecastItems
中没有名为CollectibleNum
的列。因此,通过添加这样的列,以下工作正常:
CREATE TABLE collectibles
(
collectiblenum NUMBER(10) NOT NULL,
CONSTRAINT collectibles_pk PRIMARY KEY(collectiblenum)
);
CREATE TABLE diecastitems
(
diecastname VARCHAR2(45) NOT NULL,
diecastcopy NUMBER(2) NOT NULL,
diecastscale VARCHAR2(25),
colorscheme VARCHAR2(25),
diecastyear NUMBER(4),
collectiblenum NUMBER(10), --added column
CONSTRAINT diecastitem_pk PRIMARY KEY(diecastname, diecastcopy),
CONSTRAINT diecastitem_collectible_fk FOREIGN KEY(collectiblenum)
REFERENCES collectibles(collectiblenum)
);
FIDDLE
【讨论】:
以上是关于Oracle 中的外键创建问题的主要内容,如果未能解决你的问题,请参考以下文章