无法将外键约束添加到表
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 - 在绝大多数情况下,这就是您想要的。
【讨论】:
以上是关于无法将外键约束添加到表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表