Sql 完整性约束错误再次出现
我通过以下模式创建了四个数据库表,但得到了一个完整性约束冲突错误。以下是我的整个架构以及填充表的查询:Sql 完整性约束错误再次出现,sql,oracle,referential-integrity,Sql,Oracle,Referential Integrity,我通过以下模式创建了四个数据库表,但得到了一个完整性约束冲突错误。以下是我的整个架构以及填充表的查询: create table Employee( Lastname varchar(10), FirstName varchar(10), MidInitial char(1), gender char(1), street varchar(10), city varchar(10), prima
create table Employee(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
gender char(1),
street varchar(10),
city varchar(10),
primary key(Lastname, FirstName, MidInitial));
create table company(
company_name varchar(20),
city varchar(10),
primary key(company_name));
create table Works(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
company_name varchar(20),
salary numeric(8,2),
primary key(Lastname, FirstName, MidInitial, company_name),
foreign key(Lastname, FirstName, MidInitial) references Employee,
foreign key(company_name) references company);
create table Manages(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
ManagerLastname varchar(10),
MFirstName varchar(10),
MMidInitial char(1),
start_date date,
primary key(Lastname, FirstName, MidInitial, ManagerLastname, MFirstName, MMidInitial),
foreign key(Lastname, FirstName, MidInitial) references Employee);
insert into Employee
values('Anderson', 'Susan', 'L', 'F', '108th', 'Omaha');
insert into Employee
values('Brandy', 'Dan', 'L', 'M', 'P street', 'Lincoln');
insert into Employee
values('Chen', 'Peter', 'K', 'M', '124th', 'Omaha');
insert into Employee
values('Clemson', 'Ann', 'M', 'F', 'O', 'Lincoln');
insert into Employee
values('Dale', 'Mary', 'K', 'F', '132nd', 'Omaha');
insert into Employee
values('Gill', 'Mary', 'L', 'F', 'P street', 'Lincoln');
insert into Employee
values('Harrison', 'Susan', 'M', 'F', 'Old Mill', 'Omaha');
insert into Employee
values('Jackson', 'Kim', 'A', 'F', '178th', 'Omaha');
insert into Employee
values('Jason', 'Pat', 'M', 'M', '8th', 'C. Bluffs');
insert into Employee
values('Kumar', 'Paul', 'T', 'M', 'Dodge', 'Omaha');
insert into Employee
values('Orr', 'Susanne', 'S', 'F', 'Q', 'Omaha');
insert into Employee
values('Peterson', 'Mike', 'E', 'M', 'Blondo', 'Omaha');
insert into Employee
values('Powell', 'Tom', 'E', 'M', 'Broadway', 'C. Bluffs');
insert into Employee
values('Quinn', 'Jacky', 'M', 'F', '168th', 'Omaha');
insert into Employee
values('Rand', 'Pam', 'R', 'F', '13th', 'Omaha');
insert into Employee
values('Schreck', 'Ann', 'P', 'F', '214th', 'Elkhorn');
insert into Employee
values('Simon', 'Eric', 'K', 'M', '77th', 'Lincoln');
insert into Employee
values('Smith', 'John', 'A', 'M', '8th', 'C. Bluffs');
insert into Employee
values('Thomson', 'Ron', 'F', 'M', 'Farnam', 'Omaha');
insert into Employee
values('Young', 'Don', 'R', 'M', 'Dodge', 'Omaha');
insert into Employee
values('Wong', 'Carole', 'S', 'F', 'Broadway', 'C. Bluffs');
insert into company
values('First Bank', 'Omaha');
insert into company
values('FDR', 'Omaha');
insert into company
values('Lincoln Star', 'Lincoln');
insert into company
values('Mutual of Omaha', 'Omaha');
insert into company
values('Union Pacific (UP)', 'Omaha');
insert into Works
values('Anderson', 'Susan', 'L', 'Mutual of Omaha', 48000);
insert into Works
values('Brandy', 'Dan', 'L', 'FDR', 42000);
insert into Works
values('Chen', 'Peter', 'K', 'FDR', 53000);
insert into Works
values('Clemson', 'Ann', 'M', 'First Bank', 39000);
insert into Works
values('Dale', 'Mary', 'K', 'Mutual of Omaha', 58000);
insert into Works
values('Gill', 'Mary', 'L', 'Union Pacific', 48700);
insert into Works
values('Harrison', 'Susan', 'M', 'Union Pacific', 54320);
insert into Works
values('Jackson', 'Kim', 'A', 'FDR', 68000);
insert into Works
values('Jason', 'Pat', 'M', 'FDR', 83000);
insert into Works
values('Kumar', 'Paul', 'T', 'FDR', 44000);
insert into Works
values('Orr', 'Susanne', 'S', 'Lincoln Star', 32000);
insert into Works
values('Peterson', 'Mike', 'E', 'First Bank', 37000);
insert into Works
values('Powell', 'Tom', 'E', 'First Bank', 54000);
insert into Works
values('Quinn', 'Jacky', 'M', 'First Bank', 85000);
insert into Works
values('Rand', 'Pam', 'R', 'FDR', 37000);
insert into Works
values('Schreck', 'Ann', 'P', 'First Bank', 36000);
insert into Works
values('Simon', 'Eric', 'K', 'Mutual of Omaha', 45000);
insert into Works
values('Smith', 'John', 'A', 'FDR', 55000);
insert into Works
values('Thomson', 'Ron', 'F', 'First Bank', 39000);
insert into Works
values('Young', 'Don', 'R', 'Mutual of Omaha', 27000);
insert into Works
values('Wong', 'Carole', 'S', 'First Bank', 44000);
insert into Manages
values('Anderson', 'Susan', 'L', 'Dale', 'Mary', 'K', "15-SEP-2002");
insert into Manages
values('Brandy', 'Dan', 'L', 'Jason', 'Pat', 'M', "05-MAR-2004");
insert into Manages
values('Chen', 'Peter', 'K', 'Jason', 'Pat', 'M', "12-JUNE-2002");
insert into Manages
values('Clemson', 'Ann', 'M', 'Powell', 'Tom', 'E', "30-AUG-2001");
insert into Manages
values('Gill', 'Mary', 'L', 'Harrison', 'Susan', 'M', "25-JAN-2003");
insert into Manages
values('Jackson', 'Kim', 'A', 'Jason', 'Pat', 'M', "09-MAY-2008");
insert into Manages
values('Kumar', 'Paul', 'T', 'Jason', 'Pat', 'M', "09-MAY-2001");
insert into Manages
values('Rand', 'Pam', 'R', 'Smith', 'John', 'A', "15-JAN-2004");
insert into Manages
values('Peterson', 'Mike', 'E', 'Powell', 'Tom', 'E', "30-AUG-2006");
insert into Manages
values('Schreck', 'Ann', 'P', 'Quinn', 'Jacky', 'M', "28-FEB-1996");
insert into Manages
values('Simon', 'Eric', 'K', 'Anderson', 'Susan', 'L', "22-FEB-2004");
insert into Manages
values('Smith', 'John', 'A', 'Jason', 'Pat', 'M', "05-MAR-2003");
insert into Manages
values('Thomson', 'Ron', 'F', 'Powell', 'Tom', 'E', "30-AUG-1998");
insert into Manages
values('Wong', 'Carole', 'S', 'Quinn', 'Jacky', 'M', "28-FEB-2001");
insert into Manages
values('Young', 'Don', 'R', 'Dale', 'Mary', 'K', "15-SEP-2007");
下面是我再次遇到的错误:
Schema Creation Failed: ORA-02291: integrity constraint (USER_4_3C8F2.SYS_C00778260) violated - parent key not found
这将是伟大的,让另一套眼睛来看看这一点,看看是什么错了它。。。我想知道我是否应该按照不同的顺序创建/填充表,但我认为我所做的是正确的
非常感谢您的帮助。谢谢
----更新----我也在使用SQL Fiddle和Oracle 11g R2。这是您的问题:
insert into Works values('Gill', 'Mary', 'L', 'Union Pacific', 48700);
“联合太平洋”不是您的公司之一,您有“联合太平洋(UP)”
顺便说一句,无论如何,这是一种非常糟糕的方式。像这样跨表复制数据将意味着您会一次又一次地遇到这样的问题
您的每个参考数据表(Employee
&Company
)都应该有一个代理键,而您的详细信息表(Works
和Manages
)应该使用这些代理键。例如:
create table Employee(
Id numeric(8),
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
gender char(1),
street varchar(10),
city varchar(10),
primary key(Id));
这就是你的问题:
insert into Works values('Gill', 'Mary', 'L', 'Union Pacific', 48700);
“联合太平洋”不是您的公司之一,您有“联合太平洋(UP)”
顺便说一句,无论如何,这是一种非常糟糕的方式。像这样跨表复制数据将意味着您会一次又一次地遇到这样的问题
您的每个参考数据表(Employee
&Company
)都应该有一个代理键,而您的详细信息表(Works
和Manages
)应该使用这些代理键。例如:
create table Employee(
Id numeric(8),
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
gender char(1),
street varchar(10),
city varchar(10),
primary key(Id));
嗯。注意到一些错误
insert into Works
values('Gill', 'Mary', 'L', 'Union Pacific (UP)', 48700);
insert into Works
values('Harrison', 'Susan', 'M', 'Union Pacific (UP)', 54320);
--将“联合太平洋”更改为“联合太平洋(UP)”
--将所有双引号更改为单引号确定。注意到一些错误
insert into Works
values('Gill', 'Mary', 'L', 'Union Pacific (UP)', 48700);
insert into Works
values('Harrison', 'Susan', 'M', 'Union Pacific (UP)', 54320);
foreign key(Lastname, FirstName, MidInitial) references Employee**(column)**
--将“联合太平洋”更改为“联合太平洋(UP)”
--将所有双引号更改为单引号
foreign key(Lastname, FirstName, MidInitial) references Employee**(column)**
您忘记了“员工”列
您忘记了Employee列。似乎您正在尝试向子表插入一个值,但该值在父表中不存在。再次尝试重新验证数据集。似乎您正在尝试向子表插入一个值,但该值在父表中不存在。再次尝试重新验证您的数据集。谢谢,谢谢您提供了更好的方法来编写数据集。。。我修复了错误,但是现在我在尝试构建模式时遇到了这个错误:模式创建失败:ORA-00984:列此处不允许有任何关于这个的想法?再次感谢。请参考我的帖子。。。您的所有语句都已使用原始模式在@user1462294处修复?根据@realspirituals@David-说得好,我有点匆忙,忘了做那件事。。我编辑了这篇文章。虽然没有添加任何独特的约束,但如果他/她选择更改其设计,将由OP决定。谢谢,谢谢你提供了更好的方式来编写它。。。我修复了错误,但是现在我在尝试构建模式时遇到了这个错误:模式创建失败:ORA-00984:列此处不允许有任何关于这个的想法?再次感谢。请参考我的帖子。。。您的所有语句都已使用原始模式在@user1462294处修复?根据@realspirituals@David-说得好,我有点匆忙,忘了做那件事。。我编辑了这篇文章。但是,如果没有添加任何独特的约束,那么如果OP选择更改其设计,他/她将自行决定。。