SQL如何引用组合主键中的一个主键作为其他表的外键
1个回答
展开全部
SQL> create table sxd4(id1 varchar2(3),name varchar2(10));
表が作成されました。
SQL> alter table sxd4 add primary key (id1,name);
表が変更されました。
SQL> create table sxd5(id2 varchar2(4));
表が作成されました。
SQL> alter table sxd5 add primary key (id2);
表が変更されました。
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5(id2);
表が変更されました。
SQL> insert into sxd5 values('2');
1行が作成されました。
SQL> insert into sxd4 values('2','2');
1行が作成されました。
不知道理解的对不对,在此建立了两张表(环境为oracle 10.2)
sxd4(id1 varchar2(3),
name varchar2(10))
和
sxd5(id2 varchar2(4))
其中sxd4有联合主键(id,name),sxd5有主键(id)
然后,让sxd4的主键中的一个字段id1成为了sxd5的外键,并与sxd5的主键id2关联
然后进行了插入操作,楼主可以看见,所有操作都是成功的。
那么,我们现在来讨论一下,当sxd5的id2不建立主键时的情况
SQL> create table sxd4(id1 varchar2(4),name varchar2(10));
表が作成されました。
SQL> alter table sxd4 add primary key(id1,name);
表が変更されました。
SQL> create table sxd5(id2 varchar2(4));
表が作成されました。
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5(id2);
references sxd5(id2)
*
行3でエラーが発生しました。
ORA-02270: この列リストに対して一致する一意キーまたは主キーが存在しません。
一样的步骤,先建立sxd4(id1,name),并以(id1,name)为主键,然后建立sxd5(id2),
但是没有为sxd5建立主键,直接想建立外键关系是不可以的,报错ora-02270。
这个问题是因为作为外键被关联的字段应该具有不能为空和唯一的特性(即主键的特性)
于是:
ロールバックが完了しました。
SQL> alter table sxd5 modify(id2 not null);
SQL> alter table sxd5 add unique (id2);
表が変更されました。
这时:
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5 (id2);
表が変更されました。
外键的关联就成功创建了。
表が作成されました。
SQL> alter table sxd4 add primary key (id1,name);
表が変更されました。
SQL> create table sxd5(id2 varchar2(4));
表が作成されました。
SQL> alter table sxd5 add primary key (id2);
表が変更されました。
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5(id2);
表が変更されました。
SQL> insert into sxd5 values('2');
1行が作成されました。
SQL> insert into sxd4 values('2','2');
1行が作成されました。
不知道理解的对不对,在此建立了两张表(环境为oracle 10.2)
sxd4(id1 varchar2(3),
name varchar2(10))
和
sxd5(id2 varchar2(4))
其中sxd4有联合主键(id,name),sxd5有主键(id)
然后,让sxd4的主键中的一个字段id1成为了sxd5的外键,并与sxd5的主键id2关联
然后进行了插入操作,楼主可以看见,所有操作都是成功的。
那么,我们现在来讨论一下,当sxd5的id2不建立主键时的情况
SQL> create table sxd4(id1 varchar2(4),name varchar2(10));
表が作成されました。
SQL> alter table sxd4 add primary key(id1,name);
表が変更されました。
SQL> create table sxd5(id2 varchar2(4));
表が作成されました。
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5(id2);
references sxd5(id2)
*
行3でエラーが発生しました。
ORA-02270: この列リストに対して一致する一意キーまたは主キーが存在しません。
一样的步骤,先建立sxd4(id1,name),并以(id1,name)为主键,然后建立sxd5(id2),
但是没有为sxd5建立主键,直接想建立外键关系是不可以的,报错ora-02270。
这个问题是因为作为外键被关联的字段应该具有不能为空和唯一的特性(即主键的特性)
于是:
ロールバックが完了しました。
SQL> alter table sxd5 modify(id2 not null);
SQL> alter table sxd5 add unique (id2);
表が変更されました。
这时:
SQL> alter table sxd4 add constraint fk_1
2 foreign key (id1)
3 references sxd5 (id2);
表が変更されました。
外键的关联就成功创建了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询