“如何解决MySQL错误”;无法删除或更新父行:外键约束失败";?

“如何解决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

无法删除或更新父行:外键约束失败(`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_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;

where
59
来自您的问题
where
子句,但它可以是任何有效的ID。

不是
DELETE
查询,因此不会导致该错误。
(海绵。分类法,约束分类法\u ibfk\u 1外键(有机体\u ID)引用有机体(有机体\u ID))
表示您的表“分类法”有一个外键指向您试图删除的行。首先,您应该删除使用此FK的所有行,然后从organism表中删除该行。实际上,当我使用edit and delete选项搜索organism时,我在表中得到了搜索项。在这种情况下,delete选项应该从所有表中删除organism的所有记录。(例如,分类法)。请为我提供guid以便执行此操作。很抱歉,发布时未选择。我犯了错误,其删除查询实际上是用于删除查询。我收到了该错误。请指导我进行@Rowland Shaw的删除查询