ERROR 1452. Al insertar registros mysql

publicado por: Anonymous

tengo una base de datos, pero necesito insertar los estados y municipios de México, hice mi diagrama EEER y de ahí genere mi base de datos, al hacer los insert de los estados no hay problema, ingreso 32 registros, pero al insertar los municipios, solo puedo insertar 32 municipios, al insertar el registro 33 me marca el error, el codigo de la creación de las tablas son las siguientes:


— Table CiInventario.estados


CREATE TABLE IF NOT EXISTS `CiInventario`.`estados` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `clave` VARCHAR(2) NOT NULL,
  `nombre` VARCHAR(40) NOT NULL,
  `abrev` VARCHAR(10) NOT NULL,
  `activo` TINYINT(1) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

— Table CiInventario.municipios


CREATE TABLE IF NOT EXISTS `CiInventario`.`municipios` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `estado_id` INT(11) NOT NULL,
  `clave` VARCHAR(3) NOT NULL,
  `nombre` VARCHAR(100) NOT NULL,
  `activo` TINYINT(1) NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `estado_id`
    FOREIGN KEY (`id`)
    REFERENCES `CiInventario`.`estados` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

la tabla de municipios tienen en Foreign Key Option “NO ACTION” en ON UPDATE y ON DELETE;

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (ciinventario.municipios, CONSTRAINT estado_id FOREIGN KEY (id) REFERENCES estados (id) ON DELETE NO ACTION ON UPDATE NO ACTION)

solución

Me parece que tienes un error en la declaración de tu llave foránea que vinculará a tu tabla municipios con estados, justo aquí:

CONSTRAINT `estado_id`
    FOREIGN KEY (`id`)
    REFERENCES `CiInventario`.`estados` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

Por que estas apuntando a la misma columna id pero de la tabla municipios, cuando debería ser a la columna estado_id quedando de este modo:

CONSTRAINT `fk_municipio_estado` FOREIGN KEY (`estado_id`) REFERENCES `CiInventario`.`estados` (`id`)
ON DELETE NO ACTION ON UPDATE NO ACTION)

Es decir:

  • Tu función foreign key debe recibir el nombre de la columna que en la tabla municipios hará las veces de conector entre municipios y estados, que es estado_id
  • El nombre de tu CONSTRAINT pudiera ser mejor una indicación del tipo que es y las tablas que vincula así: fk_municipio_estado
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *