【问题标题】:Foreign Key Creation issue in OracleOracle 中的外键创建问题
【发布时间】:2026-02-06 11:25:01
【问题描述】:

当我尝试创建这两个表时,我得到:

“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));

【问题讨论】:

    标签: sql oracle foreign-keys


    【解决方案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

    【讨论】: