Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

#1452 - Cannot add or update a child row: a foreign key constraint fails

Estas en el tema de #1452 - Cannot add or update a child row: a foreign key constraint fails en el foro de Mysql en Foros del Web. No comprendo por que estoy recibiendo este error.Usando workbench tengo este EER. Código: SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF ...
  #1 (permalink)  
Antiguo 16/01/2013, 01:39
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 15 años, 2 meses
Puntos: 10
#1452 - Cannot add or update a child row: a foreign key constraint fails

No comprendo por que estoy recibiendo este error.Usando workbench tengo este EER.

Código:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';



CREATE SCHEMA IF NOT EXISTS `impgrupo_content` DEFAULT CHARACTER SET latin1 ;

USE `impgrupo_content` ;



-- -----------------------------------------------------

-- Table `impgrupo_content`.`client`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`client` (

  `id` INT(33) NOT NULL AUTO_INCREMENT ,

  `name` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,

  `code` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,

  `mail` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,

  PRIMARY KEY (`id`) )

ENGINE = MyISAM

AUTO_INCREMENT = 3

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_unicode_ci;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`noticias`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`noticias` (

  `id` INT(33) NOT NULL AUTO_INCREMENT ,

  `tipo` INT(2) NOT NULL ,

  `tittle` VARCHAR(210) NOT NULL ,

  `url` TEXT NOT NULL ,

  `datos` TEXT NOT NULL ,

  `price` VARCHAR(2) NOT NULL ,

  `autor` VARCHAR(50) NOT NULL ,

  `noti` TEXT NOT NULL ,

  `resume` TEXT NOT NULL ,

  `mresume` TEXT NOT NULL ,

  `map` VARCHAR(400) NOT NULL ,

  `sec` TEXT NOT NULL ,

  `ssec` TEXT NOT NULL ,

  `date` VARCHAR(400) NOT NULL ,

  `tt` TEXT NOT NULL ,

  `stt` TEXT NOT NULL ,

  `mun` TEXT NOT NULL ,

  `rank` INT(2) NOT NULL ,

  `kword` VARCHAR(600) NOT NULL ,

  `addres` TEXT NOT NULL ,

  `cover` TEXT NOT NULL ,

  `img` VARCHAR(600) NOT NULL ,

  `cimg` TEXT NOT NULL ,

  `menu` VARCHAR(600) NOT NULL ,

  `client` VARCHAR(100) NOT NULL ,

  `des` VARCHAR(400) NOT NULL ,

  `Slide` TINYINT(1) NOT NULL ,

  `portd` TINYINT(1) NOT NULL ,

  `book` INT(2) NOT NULL ,

  `visible` TINYINT(1) NOT NULL ,

  `logs` TEXT NOT NULL ,

  PRIMARY KEY (`id`) ,

  FULLTEXT INDEX `tittle` (`tittle` ASC) ,

  FULLTEXT INDEX `noti` (`noti` ASC) ,

  FULLTEXT INDEX `resume` (`resume` ASC) ,

  FULLTEXT INDEX `mresume` (`mresume` ASC) ,

  FULLTEXT INDEX `sec` (`sec` ASC) ,

  FULLTEXT INDEX `ssec` (`ssec` ASC) ,

  FULLTEXT INDEX `tt` (`tt` ASC) ,

  FULLTEXT INDEX `mun` (`mun` ASC) ,

  FULLTEXT INDEX `kword` (`kword` ASC) )

ENGINE = MyISAM

AUTO_INCREMENT = 685

DEFAULT CHARACTER SET = latin1;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`client_user`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`client_user` (

  `UserId` INT(33) NOT NULL AUTO_INCREMENT ,

  `Uname` VARCHAR(40) NOT NULL ,

  `pass` VARCHAR(40) NOT NULL ,

  `name` VARCHAR(60) NOT NULL ,

  `mail` VARCHAR(45) NOT NULL ,

  `noticias_id` INT(33) NOT NULL ,

  PRIMARY KEY (`UserId`, `noticias_id`) ,

  UNIQUE INDEX `mail_UNIQUE` (`mail` ASC) ,

  INDEX `fk_client_user_noticias1_idx` (`noticias_id` ASC) ,

  CONSTRAINT `fk_client_user_noticias1`

    FOREIGN KEY (`noticias_id` )

    REFERENCES `impgrupo_content`.`noticias` (`id` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

AUTO_INCREMENT = 5

DEFAULT CHARACTER SET = latin1;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`consumidor`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`consumidor` (

  `ConsumidorId` INT(11) NOT NULL AUTO_INCREMENT ,

  `nombre` VARCHAR(45) NOT NULL ,

  `mail` VARCHAR(45) NOT NULL ,

  `pass` VARCHAR(40) NOT NULL ,

  `edad` DATE NOT NULL ,

  `genero` INT(2) NOT NULL ,

  PRIMARY KEY (`ConsumidorId`) ,

  UNIQUE INDEX `mail_UNIQUE` (`mail` ASC) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`horario`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`horario` (

  `id` INT(33) NOT NULL AUTO_INCREMENT ,

  `inicio` INT(11) NOT NULL ,

  `final` INT(11) NOT NULL ,

  `noticias_id` INT(33) NOT NULL ,

  PRIMARY KEY (`id`) ,

  INDEX `fk_horario_noticias1_idx` (`noticias_id` ASC) ,

  CONSTRAINT `fk_horario_noticias1`

    FOREIGN KEY (`noticias_id` )

    REFERENCES `impgrupo_content`.`noticias` (`id` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`reserva`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`reserva` (

  `ReservaId` INT(11) NOT NULL AUTO_INCREMENT ,

  `fecha` DATETIME NOT NULL ,

  `nombre` VARCHAR(30) NOT NULL ,

  `apellido` VARCHAR(30) NOT NULL ,

  `tel` VARCHAR(9) NOT NULL ,

  `email` VARCHAR(45) NOT NULL ,

  `cantidad` INT(2) NOT NULL ,

  `peticiones` TEXT NOT NULL ,

  `enviado` TINYINT(1) NOT NULL DEFAULT '0' ,

  `ConsumidorId` INT(11) NULL DEFAULT NULL ,

  `noticias_id` INT(33) NOT NULL ,

  PRIMARY KEY (`ReservaId`) ,

  INDEX `fk_reserva_consumidor1_idx` (`ConsumidorId` ASC) ,

  INDEX `fk_reserva_noticias1_idx` (`noticias_id` ASC) ,

  CONSTRAINT `fk_reserva_consumidor1`

    FOREIGN KEY (`ConsumidorId` )

    REFERENCES `impgrupo_content`.`consumidor` (`ConsumidorId` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_reserva_noticias1`

    FOREIGN KEY (`noticias_id` )

    REFERENCES `impgrupo_content`.`noticias` (`id` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

AUTO_INCREMENT = 2

DEFAULT CHARACTER SET = latin1;





-- -----------------------------------------------------

-- Table `impgrupo_content`.`review`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `impgrupo_content`.`review` (

  `ReviewId` VARCHAR(45) NOT NULL ,

  `rating` TINYINT(4) NOT NULL ,

  `comentario` TEXT NOT NULL ,

  `ReservaId` INT(11) NOT NULL ,

  `ConsumidorId` INT(11) NULL DEFAULT NULL ,

  PRIMARY KEY (`ReviewId`) ,

  INDEX `fk_review_reserva1_idx` (`ReservaId` ASC) ,

  INDEX `fk_review_consumidor1_idx` (`ConsumidorId` ASC) ,

  CONSTRAINT `fk_review_consumidor1`

    FOREIGN KEY (`ConsumidorId` )

    REFERENCES `impgrupo_content`.`consumidor` (`ConsumidorId` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_review_reserva1`

    FOREIGN KEY (`ReservaId` )

    REFERENCES `impgrupo_content`.`reserva` (`ReservaId` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;



USE `impgrupo_content` ;





SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Ahora cuando trato de hacer este query me da un mensaje de error:

Código:
INSERT INTO  `impgrupo_content`.`reserva` (

`ReservaId` ,
`fecha` ,
`nombre` ,
`apellido` ,
`tel` ,
`email` ,
`cantidad` ,
`peticiones` ,
`enviado` ,
`ConsumidorId` ,
`noticias_id`
)
VALUES (
NULL ,  '2013-01-17 00:00:00',  'Victor',  'Mendez',  '22224444',  '[email protected]',  '2',  'ninguno',  '0', NULL ,  '405'
MySQL said:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`impgrupo_content`.`reserva`, CONSTRAINT `fk_reserva_noticias1` FOREIGN KEY (`noticias_id`) REFERENCES `noticias` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

estoy seguro que dicho id existepor que si realizo el query
Código:
SELECT * FROMM noticias WHERE id=405
entonces me selecciona el registro correctamente. Sinceramente no tengo idea de cual pudiera ser el problema, les agradeceria mucho si me pudieran ayudar con esto.
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #2 (permalink)  
Antiguo 16/01/2013, 06:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Por lo pronto, creo que no puedes crear una FK en una tabla InnoDB que apunte a la PK de una tabla MyISAM, porque son motores de tablas distintos e incompatibles en ese sentido. Las MyISAM no poseen restricciones de FK, por lo que no pueden administrarla.
Hay otras consideraciones de diseño y optimización, pero no puedo explayarme más porque no tengo a mano el MySQL para hacer algunas verificaciones.
De todos modos, un consejo: No abuses de los índices (cualquiera que sea), generan reducción de performance en tablas con muchos INSERT/UPDATE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/01/2013, 09:34
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 15 años, 2 meses
Puntos: 10
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

entonces deberia tener todas las tablas con InnoDB? la verdad es que soy un poco nuevo en este tema y todabia me falta mucho por aprender.
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #4 (permalink)  
Antiguo 16/01/2013, 09:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Para que existan las FK y no generen errores, si. Pero no podrás usar índices FULLTEXT en ese caso, porque no existen en ese tipo de tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 16/01/2013, 11:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 15 años, 2 meses
Puntos: 10
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

muchas gracias ya me funciona (te dejo un +1). Ahora con lo que me recomiendas de los indices que otra opción podría tener para no usar tantos indices ya que en cada tabla estoy usando un pk y uno o dos fk, asi es como he aprendido a hacer las cosas (sobre la marcha, nunca he estudiado esto academicamente), no conozco otra forma.
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador

Etiquetas: add, child, constraint, key, row, select, sql, update, foreignkey
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:47.