微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库 – Oracle(ORA-02270):此列列表错误不匹配唯一或主键

我有两个表,表JOB和表USER,这里是结构
CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL,USERID   NUMBER,CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );

 CREATE TABLE USER
 (
   ID       NUMBER NOT NULL,CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );

现在,我想添加外键约束到JOB引用USER表,as

Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USER(ID);

这会抛出Oracle(ORA-02270):对于列列表错误,没有匹配的唯一或主键,做一些调查,似乎我们需要对USERID有唯一的键或主键约束,但是我不能像USERID一样有多个JOBS与他相关,有关如何解决这个问题的任何想法或建议?

研究ORA-02270SO related question

解决方法

ORA-2270错误非常简单:当我们在外键中引用的列与父表中的主键或唯一约束不匹配时,会发生这种错误.常见的原因是

>父母完全没有约束
>父表的约束是一个复合键,我们没有引用外键语句中的所有列.

在您发布的代码中似乎并非如此.但是这是一个红色的鲱鱼,因为您的代码不像您发布的那样运行.从以前的编辑来看,我认为你不是发布你的实际代码,而是一些简化的例子.不幸的是,在简化过程中,您已经根除了导致ORA-2270错误的原因.

因为,如果我们修复你的代码运行,它将运行.一路走来

sql> CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL,CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5    6  

Table created.

sql> CREATE TABLE USER
 (
   ID       NUMBER NOT NULL,CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5  
CREATE TABLE USER
             *
ERROR at line 1:
ORA-00903: invalid table name


sql>

因此,该语句失败,因为USER是一个保留关键字,我们不能为表USER命名.我们来解决一下:

sql> 1
  1* CREATE TABLE USER
sql> a s
  1* CREATE TABLE USERs
sql> l
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL,4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )
sql> r
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL,4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )

Table created.

sql> Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USERS(ID);   

Table altered.

sql>

和洛!没有ORA-2270错误.

所以,我们在这里做的不多,可以帮助你进一步.你的代码错误.你可以在这里发布你的代码,我们中的一个可以发现你的错误.或者你可以检查自己的代码,并发现自己.

原文地址:https://www.jb51.cc/mssql/76220.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐