繁体   English   中英

无法将外键约束添加到表

[英]Can't add foreign key constraint to table

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的外键添加外键约束。 但是, CUSTOMER表没有CREDITSTATUS的外键。

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

编辑

使用ALTER TABLE将列添加到CUSTOMER:

ALTER TABLE CUSTOMER ADD CREDITSTATUS VARCHAR(20);

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

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

ALTER TABLE customer ADD creditstatus VARCHAR2(20);

然后使用您已有的语句将其设置为外键。

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

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-无论如何,这是您想要的大多数情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM