的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