Rac*_*hel 17 database oracle foreign-keys primary-key
我有两个表,Table JOB并且Table 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
);
Run Code Online (Sandbox Code Playgroud)
现在,我想添加外键约束来JOB引用USER表,如
Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USER(ID);
Run Code Online (Sandbox Code Playgroud)
这个抛出Oracle (ORA-02270) : no matching unique or primary key for this column-list error,做一些调查似乎我们需要unique key or primary key约束,USERID但我不能拥有,因为一个人USERID可以有多个JOBS与他相关,任何关于如何解决这个问题的想法或建议?
APC*_*APC 34
ORA-2270错误非常简单:当我们在外键中引用的列与父表上的主键或唯一约束不匹配时,会发生错误.常见的原因是
在您发布的代码中似乎都不是这种情况.但这是一个红色的鲱鱼,因为你的代码没有像你发布的那样运行.从以前的编辑来看,我认为你不是发布你的实际代码,而是一些简化的例子.不幸的是,在简化过程中,您已经根除了导致ORA-2270错误的任何原因.
因为,如果我们修改你的代码以便它运行,它就会运行.一路走来.
SQL> CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID NUMBER,
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>
Run Code Online (Sandbox Code Playgroud)
因此,该语句失败,因为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>
Run Code Online (Sandbox Code Playgroud)
瞧!没有ORA-2270错误.
所以,我们在这里做的不多,可以帮助你.您的代码中存在错误.你可以在这里发布你的代码,我们中的一个人可以发现你的错误.或者您可以检查自己的代码并自己发现它.
在我的情况下,问题是由禁用的 PK 引起的。
为了启用它:
我寻找约束名称:
SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'referenced_table_name';
然后我取了约束名称,以便使用以下命令启用它:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;