的MySQL版本选择()援助5.5.9在Mac OS/X 10.6需要不可思议的,可重复的MySQL错误1452(23000)外键约束
问题
当我执行sql脚本下面,我遇到了一个非常复杂的外键约束错误。看起来好像它不应该抛出这个错误。此外,我知道,其他人曾试图遵循的步骤,但无法瑞普(见:http://forums.mysql.com/read.php?10,415350,415350#msg-415350)
任何人都可以发现它是什么我们做错了什么?
重现:
- 创建数据库constraint_test;
- 创建constraint_test.sql文件并粘贴下面的SQL。
- 从CMD线执行 “的MySQL constraint_test < constraint_test.sql”(或在我的SQL执行 “源TMP/constraint_test.sql”
预期结果:行保存到客户端,保险和受益表。
实际结果:如您所见,我们始终得到外键约束错误是类似于:
“ERROR 1452(23000)在第55行:无法添加或upda te子行:外键约束失败(constraint_test
。 beneficiary
,约束FK41BADEC55CE3480
外键(insured_id
)参考文献Insured
(insured_id
))”
但是,肯定是有父表的insured_id保险。
如果你能!
constraint_test请帮助。 sql内容:
create table Beneficiary (
beneficiary_id bigint not null,
district varchar(255),
serviceUnit varchar(255),
insuredNo integer,
beneficiaryIndex integer,
relationship varchar(255),
percentage double precision,
fullName varchar(255),
lastUpdatedDate datetime,
insured_id bigint,
contractNo varchar(255),
primary key (beneficiary_id)
);
create table Client (
client_id bigint not null,
firstName varchar(255),
lastName varchar(255),
email varchar(255),
initial varchar(255),
birthDate datetime,
district varchar(255),
serviceUnit varchar(255),
genderType varchar(255),
externalId varchar(255),
externalTempId varchar(255),
taxationProvince varchar(255),
children varchar(255),
manufacturerClientNumber varchar(255),
primary key (client_id)
);
create table Insured (
insured_id bigint not null,
client_id bigint not null,
insuredNo integer,
primary key (insured_id)
);
alter table Beneficiary
add index FK41BADEC55CE3480 (insured_id),
add constraint FK41BADEC55CE3480
foreign key (insured_id)
references Insured (insured_id);
alter table Insured
add index FKD7E770CAC207FE14 (client_id),
add constraint FKD7E770CAC207FE14
foreign key (client_id)
references Client (client_id);
insert into Client (client_id) values (1);
insert into Insured (insured_id, client_id) values (1,1);
insert into Beneficiary (beneficiary_id, insured_id) values (1,1);
输出的显示引擎InnoDB的状态? – ggiroux 2011-04-06 06:32:39
好吧,至少在这里有一些进展。即使在向Beneficiary.insured的数据类型添加“not null”之后,我们仍然能够重现错误。然而,我们的节目引擎InnoDB的输出包含以下下最新的外键的错误:“但父表'constraint_test'.'Insured' 或它的.ibd文件目前不存在” 该表保险确实存在。 – user694157 2011-04-06 19:28:46
非常感谢。我在今天的大部分时间里都面临这个确切的问题,然后才发现这个错误。如果你使用Hibernate,你可以通过使用ImprovedNamingStrategy类来命名表而不是默认值来解决这个问题。 – I82Much 2011-05-20 20:32:37