Mysql 错误1452(23000):无法添加或更新子行
我有以下数据库,当我尝试运行下面显示的查询时,我得到一个错误,即Mysql 错误1452(23000):无法添加或更新子行,mysql,foreign-keys,mysqldump,Mysql,Foreign Keys,Mysqldump,我有以下数据库,当我尝试运行下面显示的查询时,我得到一个错误,即无法添加或更新子行。我不明白为什么我会犯这个错误 数据库中存在我正在输入的对象id(327)。我也用其他对象id尝试过这个方法,同样的错误也出现了。这里发生了什么 like_objects +-------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extr
无法添加或更新子行
。我不明白为什么我会犯这个错误
数据库中存在我正在输入的对象id(327)。我也用其他对象id
尝试过这个方法,同样的错误也出现了。这里发生了什么
like_objects
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| object_id | int(11) | NO | MUL | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
+-------------+---------+------+-----+---------+----------------+
objects
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| object_name | longtext | NO | | NULL | |
| object_desc | longtext | NO | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| likes | int(11) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
以下是查询及其产生的错误:
insert into like_objects (object_id,user_id) values (327,1)
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`test_db`.`like_objects`, CONSTRAINT `object_id_refs_id_57f96810` FOREIGN KEY (`object_id`)
REFERENCES `objects` (`id`))
这是非常奇怪的,因为我对另一个表使用了类似的like
逻辑,它工作得非常好
重要我从
mysqldump
中获得了对象
表。最初,objects
表是从PhpMyAdmin创建的,而like\u objects表是由django模型创建的
我已经找出了问题所在。正如我在问题中所说,objects
表是使用phpmyadmin
创建的,然后转储到我的数据库中,该数据库是django项目的一部分
因此,最初创建的表的存储引擎是MyISAM
,但django创建的表的存储引擎是innodb
。所以,每当我试图在引用对象的like_objects
表中插入一个对象时,就会出现存储类型不兼容的情况
这帮助我找到了我的表的存储引擎是什么,然后我使用belwo给定的命令将MyISAM引擎更改为innodb,它工作正常
ALTER TABLE products ENGINE = innodb
请将健全性检查的结果(即,select*from objects,其中id=327
)添加到帖子中。另外,为这两个表添加create table
语句可能会有所帮助。@MattFenwick:由于对象描述是一个长文本,因此此查询的结果非常长。我无法复制整个内容,但正如预期的那样,我得到了正确的元组。id
确实存在于表中。正如我所说,我从mysqldump获得了这个表,原始表是很久以前创建的,我不记得create table
,但当时我使用phpmyadmin
show create table like_objects代码>