同一表中的Oracle SQL外键[重复]

xmq68pz9  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(121)

此问题已在此处有答案

Oracle (ORA-02270) : no matching unique or primary key for this column-list error(11个回答)
13天前关闭
如果要设置为外键的属性来自当前表而不是另一个表,我如何设置外键约束?
当我尝试以正常方式设置约束时,

ALTER TABLE a ADD CONSTRAINT a_fk FOREIGN KEY (att)
    REFERENCES a (att);

,给出错误报告“no matching unique or primary key for this column-list”。

3zwtqj6y

3zwtqj6y1#

那么,正如亚历克斯评论的那样,引用同一列的目的是什么?最常见的情况是employees表,看起来像这样:

SQL> create table employees
  2  (emp_id       number  constraint pk_employees primary key,
  3   ename        varchar2(20),
  4   mgr_id       number
  5  );

Table created.
  • emp_id(员工ID)是主键列
  • mgr_id(雇员的经理)应该是引用emp_id的外键列
  • 含义:经理必须是员工之一

因此,您可以将其设置为

SQL> alter table employees add constraint fk_emp_mgr
  2    foreign key (mgr_id)
  3    references employees (emp_id);

Table altered.

正如Oracle告诉你的,你必须引用唯一或主键列(emp_id已经是)。
基本上,这就是你想要的:
如果要设置为外键的属性来自当前表而不是另一个表,我如何设置外键约束?
最后,你真的能做到你所尝试的,即。设置引用同一列的外键?是的,可以(只要它已经是主键或唯一键);

SQL> create table employees
  2  (emp_id    number constraint pk_employees primary key);

Table created.

SQL> alter table employees add constraint fk_emp_mgr
  2    foreign key (emp_id)
  3    references employees (emp_id);

Table altered.

相关问题