oracle中2个表中的引用完整性

时间:2014-01-10 16:37:54

标签: sql database oracle oracle10g

我在Oracle中有一个表,表格如下:

create table serv (
ser number(7),
mno number(4), 
cp number(4),
primary key (ser, mno, cp)
);

和其他表一样,就像:

create table ftp (
mno number(4),
cp number(4),
ftp varchar2(9),
ser number(7),
constraint fk_prueba
  foreign key (mno, ser,cp)
  references serv (mno, ser,cp)
);

我试图在serv表中插入以下值:

insert into serv values(1,2,3);

现在我在ftp表中插入值:

insert into ftp values (1,2,'hola',null);
insert into ftp values (1,5,'hola',null);
insert into ftp values (1,9,'hola',null);

问题是我可以在FTP中插入值,并且无法插入值,因为在serv中我有mno 2,并且我将mno插入到serv中不存在的ftp中。

我需要在ftp中插入值,这些值存在于serv。

谁可以提供帮助?

由于

2 个答案:

答案 0 :(得分:1)

  • 您正在创建复合主键并通过子表引用它。所以你基于组合ser,mno,cp在两个表之间创建关系。只有这种组合才能从专利表中提及..不会单独处理每个值

  • 因此,通过在列ser上创建参照完整性和在mno&上创建复合ref.int来关联两个表。 CP

答案 1 :(得分:0)

这就是外键在Oracle中的工作方式。用它来克服这个问题

 NOT NULL references serv (mno, ser,cp)