Pues para mi es un problema de logica

esto deberia resolver el problema sin programar la logica de datos en la de negocios


Lo unico que hice fue crear una foreign key a la primary key, delete on cascade, update on cascade

he aqui el sql

CREATE TABLE IF NOT EXISTS `test`.`familia` (
`idfamilia` INT(11) NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`idpadre` INT(11) NULL ,
PRIMARY KEY (`idfamilia`) ,
INDEX `fk_familia_familia` (`idpadre` ASC) ,
CONSTRAINT `fk_familia_familia`
FOREIGN KEY (`idpadre` )
REFERENCES `test`.`familia` (`idfamilia` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
que conste que lo he probado antes

con los mismos datos que has puesto
