我在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。
中谁可以提供帮助?
由于
答案 0 :(得分:1)
您正在创建复合主键并通过子表引用它。所以你基于组合ser,mno,cp在两个表之间创建关系。只有这种组合才能从专利表中提及..不会单独处理每个值
因此,通过在列ser上创建参照完整性和在mno&上创建复合ref.int来关联两个表。 CP
答案 1 :(得分:0)
这就是外键在Oracle中的工作方式。用它来克服这个问题
NOT NULL references serv (mno, ser,cp)