“如何解决MySQL错误”;无法删除或更新父行:外键约束失败";?
无法删除或更新父行:外键约束失败(`Spoone`.`taxonomy`,约束`taxonomy\u ibfk\u 1`外键(`organism\u id`)引用`organism`(`organism\u id`)) 我在删除整个记录时出现此错误 实际上,我想从海绵数据库中所有由id关联的表中删除整个记录 我的生物表是:-“如何解决MySQL错误”;无法删除或更新父行:外键约束失败";?,mysql,Mysql,无法删除或更新父行:外键约束失败(`Spoone`.`taxonomy`,约束`taxonomy\u ibfk\u 1`外键(`organism\u id`)引用`organism`(`organism\u id`)) 我在删除整个记录时出现此错误 实际上,我想从海绵数据库中所有由id关联的表中删除整个记录 我的生物表是:- CREATE TABLE IF NOT EXISTS `organism` ( `organism_id` int(11) NOT NULL AUTO_INCREMEN
CREATE TABLE IF NOT EXISTS `organism` (
`organism_id` int(11) NOT NULL AUTO_INCREMENT,
`experts_id` int(11) NOT NULL,
`literature_id` int(11) NOT NULL,
`genus` varchar(255) NOT NULL,
`species` varchar(255) NOT NULL,
`scientific_name` varchar(255) NOT NULL,
`organism_type` varchar(255) NOT NULL,
`author_org` varchar(255) NOT NULL,
`found_year` varchar(255) NOT NULL,
`curated_year` date NOT NULL,
`curated_status` varchar(10) NOT NULL,
PRIMARY KEY (`organism_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;
分类表为:
CREATE TABLE IF NOT EXISTS `taxonomy` (
`taxonomy_id` int(11) NOT NULL AUTO_INCREMENT,
`organism_id` int(11) NOT NULL,
`kingdom` varchar(255) NOT NULL,
`phylum` varchar(255) NOT NULL,
`class` varchar(255) NOT NULL,
`order_tax` varchar(255) NOT NULL,
`family` varchar(255) NOT NULL,
PRIMARY KEY (`taxonomy_id`),
KEY `organism_id` (`organism_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;
但当我使用删除查询时:-
SELECT a.*,u.*,s.*,b.*,c.*,d.*,e.*,i.*,m.*
FROM organism a
JOIN taxonomy u
ON u.organism_id = a.organism_id
JOIN synonym s
ON s.organism_id = u.organism_id_id
JOIN biogeography b
ON b.organism_id = s.organism_id_id
JOIN common_name c
ON c.organism_id = b.organism_id_id
JOIN description d
ON d.organism_id = c.organism_id_id
JOIN ecology e
ON e.organism_id = d.organism_id_id
JOIN economic_importance i
ON i.organism_id = e.organism_id_id
JOIN images m
ON m.organism_id = i.organism_id_id
WHERE m.organism_id = 59
我正在克服错误
如何更改我的删除查询以删除上面的#1452错误?正如Bob0t在评论中所说的,错误是由于存在链接到您的
有机体id
的值造成的,默认情况下,该值阻止删除父行
您应该更改分类法表的定义,并添加以下内容:
CREATE TABLE IF NOT EXISTS `taxonomy` (
`taxonomy_id` int(11) NOT NULL AUTO_INCREMENT,
`organism_id` int(11) NOT NULL,
`kingdom` varchar(255) NOT NULL,
`phylum` varchar(255) NOT NULL,
`class` varchar(255) NOT NULL,
`order_tax` varchar(255) NOT NULL,
`family` varchar(255) NOT NULL,
PRIMARY KEY (`taxonomy_id`),
CONSTRAINT org_id FOREIGN KEY (`organism_id`) REFERENCES organism(`organism_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;
这样,当您删除父行(在表organism
中)时,您也会删除表分类法中的所有引用子行
编辑
为了保证答案的完整性,delete查询应该像
DELETE FROM `organism` WHERE `organism_id` = 59;
where59
来自您的问题where
子句,但它可以是任何有效的ID。不是DELETE
查询,因此不会导致该错误。(海绵。分类法,约束分类法\u ibfk\u 1外键(有机体\u ID)引用有机体(有机体\u ID))
表示您的表“分类法”有一个外键指向您试图删除的行。首先,您应该删除使用此FK的所有行,然后从organism表中删除该行。实际上,当我使用edit and delete选项搜索organism时,我在表中得到了搜索项。在这种情况下,delete选项应该从所有表中删除organism的所有记录。(例如,分类法)。请为我提供guid以便执行此操作。很抱歉,发布时未选择。我犯了错误,其删除查询实际上是用于删除查询。我收到了该错误。请指导我进行@Rowland Shaw的删除查询