gpt4 book ai didi

mysql - 需要帮助解决不可思议的、可重现的 MySQL ERROR 1452 (23000) Foreign Key Constraint

转载 作者:行者123 更新时间:2023-11-29 01:04:53 27 4
gpt4 key购买 nike

MySQL select version() 在 Mac OS/X 10.6 上是 5.5.9

问题

当我执行下面的sql脚本时,遇到了一个很费解的外键约束错误。似乎它不应该抛出这个错误。此外,我知道其他人已尝试按照这些步骤操作但无法重现(请参阅:http://forums.mysql.com/read.php?10,415350,415350#msg-415350)

任何人都可以发现我们做错了什么吗?

重现:

  1. 创建数据库constraint_test;
  2. 创建 constraint_test.sql 文件并粘贴下面的 sql。
  3. 从 cmd 行执行“mysql constraint_test < constraint_test.sql”(或在我的 sql 中执行“source tmp/constraint_test.sql”

预期结果:行保留到客户、被保险人和受益人表。

实际结果:如您所见,我们一直收到的外键约束错误类似于:

“第 55 行的错误 1452 (23000):无法添加或更新子行:外键约束失败(constraint_testbeneficiary,CONSTRAINT FK41BADEC55CE3480 外键 (insured_id) 引用 Insured (insured_id))"

但是父表Insured中肯定有一个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);

最佳答案

您的数据类型不完全匹配:
Beneficiary.insured_id 是 bigint,而 Insured.insured_id bigint not null

Innodb 对这些非常敏感,请确保您的 FKs 列定义在两个表中完全相同,包括可空性。

关于mysql - 需要帮助解决不可思议的、可重现的 MySQL ERROR 1452 (23000) Foreign Key Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com