【问题标题】:Oracle SQL : Cannot create a foreign key based on index of more than one columnOracle SQL:无法根据多列索引创建外键
【发布时间】:2020-04-27 20:14:04
【问题描述】:

我无法根据多列索引创建外键。

添加外键返回错误:

ORA-02270: 此列列表没有匹配的唯一键或主键。

代码下方:

CREATE TABLE test_ek_uk (NOOPER VARCHAR2(7) NOT NULL
                        ,NUMSEQ NUMBER NOT NULL
                        ,ANY_TEXT VARCHAR2(4000));

CREATE UNIQUE INDEX test_ek_uk_nooper_numseq ON test_ek_uk (NOOPER, NUMSEQ);


CREATE TABLE test_ek_fk (ID NUMBER UNIQUE NOT NULL, NOOPER VARCHAR2(7), NUMSEQ number);

ALTER TABLE test_ek_fk ADD CONSTRAINT test_ek_fk_FK FOREIGN KEY (NOOPER, NUMSEQ) REFERENCES test_ek_uk (NOOPER, NUMSEQ); 

【问题讨论】:

  • 你需要一个唯一的约束,而不是一个唯一的索引。

标签: sql oracle indexing foreign-keys


【解决方案1】:

外键引用主键约束或唯一约束。而且它必须是一个约束,唯一索引是不够的。

如果您已经有索引,那么您可以基于该索引创建唯一约束。对于您的情况:

alter table test_ek_uk
  add constraint test_ek_uk_nooper_numseq unique (NOOPER, NUMSEQ)
  using index altest_ek_uk_nooper_numseq;

但如果您没有该索引 - 则无需显式创建它。 因此,您可以创建唯一约束,而不是创建唯一索引:

alter table test_ek_uk
  add constraint test_ek_uk_nooper_numseq unique (NOOPER, NUMSEQ);

唯一索引是在您创建此唯一约束时在后台创建的。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多