gpt4 book ai didi

mysql - 无法添加或更新子行 : a foreign key constraints. 这是不可能的

转载 作者:行者123 更新时间:2023-11-29 23:30:27 25 4
gpt4 key购买 nike

我在 MySQL 中遇到了一个非常奇怪的问题,在添加新行时出现以下错误:

Cannot add or update a child row: a foreign key constraint fails (gestikids_demo.child_moments, CONSTRAINT fk_child_moments_moment_16 FOREIGN KEY (moment_id) REFERENCES moments (id))

但我在条目中正确添加了现有的 moment_id。以下是表格定义:

CREATE TABLE `child_moments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`child_id` bigint(20) DEFAULT NULL,
`moment_id` bigint(20) DEFAULT NULL,
`day` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_child_moments_1` (`child_id`,`moment_id`,`day`),
KEY `ix_child_moments_child_15` (`child_id`),
KEY `ix_child_moments_moment_16` (`moment_id`),
CONSTRAINT `fk_child_moments_child_15` FOREIGN KEY (`child_id`) REFERENCES `childs` (`id`),
CONSTRAINT `fk_child_moments_moment_16` FOREIGN KEY (`moment_id`) REFERENCES `moments` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=196596 DEFAULT CHARSET=latin1

CREATE TABLE `moments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`is_meal` tinyint(1) DEFAULT '0',
`sort` int(11) DEFAULT NULL,
`pole_id` bigint(20) DEFAULT NULL,
`type_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ix_moments_pole_72` (`pole_id`),
KEY `ix_moments_type_73` (`type_id`)
) ENGINE=MyISAM AUTO_INCREMENT=117 DEFAULT CHARSET=latin1

出了什么问题?

我测试了手动输入数据,所有字段都填充了现有 ID,但插入失败。

感谢您的帮助。

更新:如果我插入没有moment_id的数据,则插入成功。我检查了外键是否正确编写(约束中没有错误),但似乎没有。

更新2:

我尝试在其他数据库中重新创建这两个表的简化版本,以查看错误是否确实与它们有关,并且出现以下错误:

Can't create table 'child_moments' (errno: 150)

插入内容如下:

CREATE TABLE `child_moments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`moment_id` bigint(20) DEFAULT NULL,
`day` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_child_moments_1` (`moment_id`,`day`),
KEY `ix_child_moments_moment_16` (`moment_id`),
CONSTRAINT `fk_child_moments_moment_16` FOREIGN KEY (`moment_id`) REFERENCES `moments` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `moments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`is_meal` tinyint(1) DEFAULT '0',
`sort` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1

如果我删除以下行,插入就会成功:

 KEY `ix_child_moments_moment_16` (`moment_id`),
CONSTRAINT `fk_child_moments_moment_16` FOREIGN KEY (`moment_id`) REFERENCES `moments` (`id`)

所以问题显然就在这些行,但我无法解释是什么以及为什么:/

最佳答案

终于找到问题了,感谢MySQL Creating tables with Foreign Keys giving errno: 150

实际上非常简单:两个表没有相同的引擎!是的,moments 是 MyISAM,child_moment 是 InnoDB。

将两者都切换到 InnoDB 解决了我的问题。

希望它也能帮助其他人!

关于mysql - 无法添加或更新子行 : a foreign key constraints. 这是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628747/

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