我有以下数据库,当我尝试运行下面显示的查询时,我收到错误Cannot add or update a child row
。我不明白为什么我会收到这个错误。
我输入的object_id
(327)存在于数据库中。我已经尝试了其他object_id
s,同样的错误出现了。这里发生了什么?
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
逻辑,它工作得非常好。
重要我从objects
获得了mysqldump
表格。最初,objects
表是从PhpMyAdmin创建的,而且like_objects表是由django models
答案 0 :(得分:3)
我已经弄明白问题是什么了。正如我在我的问题中所说,objects
表是使用phpmyadmin
创建的,然后转储到我的数据库中,该数据库是django project
的一部分。
因此,最初创建的表的存储引擎为MyISAM
,但django创建的表具有存储引擎innodb
。因此,每当我尝试在引用like_objects
表的objects
表中插入对象时,存储类型就会出现这种不兼容性。
这个link帮助我找出了我的表的存储引擎是什么,然后我使用belwo给出的命令将MyISAM引擎更改为innodb,它运行正常。
ALTER TABLE products ENGINE = innodb