Sql 设置外键时出现的奇怪问题
数据库:os:xp2002上的Oracle 10.1 我在employee表中设置外键,但如果出现错误 此列列表没有匹配的唯一键或主键 我使用以下查询来创建表 部门表:Sql 设置外键时出现的奇怪问题,sql,oracle,Sql,Oracle,数据库:os:xp2002上的Oracle 10.1 我在employee表中设置外键,但如果出现错误 此列列表没有匹配的唯一键或主键 我使用以下查询来创建表 部门表: create table department( d_name varchar2(10) not null, d_no_of_employees number(4)); create table employee( e_id number(4) , e_name varchar2(30)
create table department(
d_name varchar2(10) not null,
d_no_of_employees number(4));
create table employee(
e_id number(4) ,
e_name varchar2(30) not null,
e_f_name varchar2(30) not null,
e_desg varchar2(20) not null,
e_address varchar2(50) not null,
e_phone_no number(12) not null,
e_salary number(10) not null,
e_house_rent number(6) not null,
e_conv_allow number(6) not null,
e_email varchar2(50) not null unique,
d2_name varchar2(10) not null,
e_hire_month number(2) not null,
e_hire_year number(4) not null,
constraint e_id_pk primary key(e_id),
constraint d2_name_fk foreign key(d2_name) references department(d_name))
;
员工表:
create table department(
d_name varchar2(10) not null,
d_no_of_employees number(4));
create table employee(
e_id number(4) ,
e_name varchar2(30) not null,
e_f_name varchar2(30) not null,
e_desg varchar2(20) not null,
e_address varchar2(50) not null,
e_phone_no number(12) not null,
e_salary number(10) not null,
e_house_rent number(6) not null,
e_conv_allow number(6) not null,
e_email varchar2(50) not null unique,
d2_name varchar2(10) not null,
e_hire_month number(2) not null,
e_hire_year number(4) not null,
constraint e_id_pk primary key(e_id),
constraint d2_name_fk foreign key(d2_name) references department(d_name))
;
请提供任何解决方案。外键必须是另一个表中的主键或唯一键。将d_名称设为部门表的主键
create table department(
d_name varchar2(10) not null,
d_no_of_employees number(4),
constraint d_name_pk primary key(d_name));
然后创建Employee表。根据您发布的内容,您在
部门表上似乎没有主键。比如:
create table department(
d_name varchar2(10) not null,
d_no_of_employees number(4)
constraint department_pk primary key(d_name));
或在创建之后:
alter table department
add constraint department_pk primary key(d_name)
...
谢谢。但是在使用oracle 9i时,上面的问题很好。您能解释一下原因吗?@Adnan-您确定旧数据库中的D_NAME
上至少没有唯一的索引吗?外键可以引用声明为唯一的父项,尽管它实际上应该只引用主键。@Adrian-在9i版本中,是否有一个单独的alter table
命令在创建部门表后添加PK?@Alex Poole:没有,在创建部门表后没有任何特殊的alter table命令添加PK。@Justin Cave:是的,我确信旧表中的D_名称在laeast没有唯一的索引数据库。谢谢大家。但在使用oracle 9i时,上述问题都很好。有人能解释一下原因吗?在oracle中,从来都不可能创建不引用父表中主键或唯一键的外键,