如何在oracle 10g中使用双外键

5 oracle

我创建了两个表

create table ref1(id varchar2(3) primary key);
create table ref2(id varchar2(3) primary key);
Run Code Online (Sandbox Code Playgroud)

现在我想为 ref1.id 和 ref2.id 创建一个单列作为外键的第三个表

create table actual(p varchar2(3) );
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

小智 14

你可以试试这个:

CREATE TABLE ref1
(
    id VARCHAR2(3) PRIMARY KEY
);

CREATE TABLE ref2
(
    id VARCHAR2(3) PRIMARY KEY
);

CREATE TABLE look
(
    p VARCHAR2(3),
    CONSTRAINT fk_p_ref1 FOREIGN KEY (p) REFERENCES ref1(id),
    CONSTRAINT fk_p_ref2 FOREIGN KEY (p) REFERENCES ref2(id)
);
Run Code Online (Sandbox Code Playgroud)

在 10G R2 服务器上进行了测试,没有投诉(目前)。


编辑

简单测试结果:

SQL> insert into ref1 (id) values ('abc');

1 row created.

SQL> insert into ref2 (id) values ('def');

1 row created.

SQL> insert into look (p) values ('abc');
insert into look (p) values ('abc')
*
ERROR at line 1:
ORA-02291: integrity constraint (LINEQZ.FK_P_REF2) violated - parent key not
found


SQL> insert into ref2 (id) values ('abc');

1 row created.

SQL> insert into look (p) values ('abc');

1 row created.
Run Code Online (Sandbox Code Playgroud)

  • 感人的。一个人永远不会停止学习。 (4认同)
  • 当 FK 被内联定义时,它甚至可以工作:`CREATE TABLE look( p VARCHAR(3) REFERENCES ref1(id) REFERENCES ref2(id) );` (2认同)