无法将外键约束添加到表

Posted

技术标签:

【中文标题】无法将外键约束添加到表【英文标题】:Can't add foreign key constraint to table 【发布时间】:2016-05-15 09:39:38 【问题描述】:
CREATE TABLE CUSTOMER
(
    CNUM VARCHAR(25) NOT NULL,
    CNAME VARCHAR(75) NOT NULL,
    CTYPE VARCHAR(20) NOT NULL,

    CONSTRAINT CUSTOMER_PK PRIMARY KEY(CNUM),
    CONSTRAINT CHECK_CTYPE CHECK(CTYPE IN('INDIVIDUAL', 'INSTITUTION'))
);

CREATE TABLE CREDIT_TERM
(
    CREDITSTATUS VARCHAR(20) NOT NULL,
    STARTDATE DATE NOT NULL,
    ENDDATE DATE NOT NULL,

    CONSTRAINT CREDIT_TERM_PK PRIMARY KEY(CREDITSTATUS)
);


insert into CREDIT_TERM values('ONE-MONTH','15-05-2015','15-06-2015');
insert into CREDIT_TERM values('TWO-MONTH','15-05-2015','15-06-2015');
insert into CREDIT_TERM values('THREE-MONTH','15-05-2015','15-06-2015');

ALTER TABLE CUSTOMER 
ADD CONSTRAINT CUSTOMER_FK_CREDITSTATUS 
    FOREIGN KEY(CREDITSTATUS) REFERENCES CREDIT_TERM(CREDITSTATUS);

我正在尝试添加外键约束,但我不明白为什么会出现此错误:

最后一行出现错误: ORA-00904: "CREDITSTATUS": 标识符无效

【问题讨论】:

您的customer 表没有creditstatus 列。你到底想做什么? 我如何添加信用状态列添加使其引用 credit_term 【参考方案1】:

正如我在 cmets 中指出的,您的 customer 表没有 creditstatus 列。您首先必须添加它:

ALTER TABLE customer ADD creditstatus VARCHAR2(20);

然后用你已有的语句将它设为外键。

【讨论】:

好的,如果可以说我想为客户表中记录的信用状态添加一个值,我该怎么做?【参考方案2】:

您正在尝试为 CUSTOMER 表上名为 CREDITSTATUS 的外键添加外键约束。但是,CUSTOMER 表没有CREDITSTATUS 的外键。

您必须在CUSTOMER 中为CREDITSTATUS 创建一个外键,然后重新运行最后一行以添加约束。

编辑

使用 ALTER TABLE 将列添加到 CUSTOMER:

ALTER TABLE CUSTOMER ADD CREDITSTATUS VARCHAR(20);

文档: http://www.techonthenet.com/oracle/tables/alter_table.php

【讨论】:

好的,如果可以说我想为客户表中记录的信用状态添加一个值,我该怎么做? @user6235245 - 带有 UPDATE 语句【参考方案3】:

您可以在一个语句中添加列和外键约束:

alter table customer add (
   creditstatus varchar2(20) constraint customer_fk_creditstatus references credit_term
   );

一些笔记。首先,我将列定义括在括号中。没有它们也可以工作,但官方语法似乎需要它们。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103924

其次,在内联约束中(在列级别定义,而不是在表级别定义),您不能使用 FOREIGN KEY 一词。 REFERENCES 一词已经标识了约束类型。第三,如果您引用被引用表的 PRIMARY KEY,则不需要(但如果您愿意,可以)命名被引用表中的被引用列。如果您不命名列,则默认情况下将使用引用表的 PRIMARY KEY - 在绝大多数情况下,这就是您想要的。

【讨论】:

以上是关于无法将外键约束添加到表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 无法添加外键约束

Laravel:无法添加外键约束

使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表

使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表

oracle 如何创建表外键

判断子表外键约束参数类型