update solucion pudo foreign fails error delete cómo crear corregir constraint como clave child cannot ajena mysql mysql-error-1452

mysql - solucion - ERROR 1452: No se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa



error no se pudo crear la clave ajena (5)

He creado tablas en MySQL Workbench como se muestra a continuación:

Tabla ORDRE:

CREATE TABLE Ordre ( OrdreID INT NOT NULL, OrdreDato DATE DEFAULT NULL, KundeID INT DEFAULT NULL, CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID), CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID) ) ENGINE = InnoDB;

Tabla PRODUKT:

CREATE TABLE Produkt ( ProduktID INT NOT NULL, ProduktBeskrivelse VARCHAR(100) DEFAULT NULL, ProduktFarge VARCHAR(20) DEFAULT NULL, Enhetpris INT DEFAULT NULL, CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID) ) ENGINE = InnoDB;

y la tabla ORDRELINJE:

CREATE TABLE Ordrelinje ( Ordre INT NOT NULL, Produkt INT NOT NULL, AntallBestilt INT DEFAULT NULL, CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt), CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID), CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID) ) ENGINE = InnoDB;

así que cuando intento insertar valores en la tabla ORDRELINJE , obtengo:

Código de error: 1452. No se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa ( srdjank . Ordrelinje , CONSTRAINT Ordrelinje_fk FOREIGN KEY ( Ordre ) REFERENCIAS Ordre ( OrdreID ))

He visto las otras publicaciones sobre este tema, pero no tuve suerte. ¿Estoy supervisando algo o alguna idea de qué hacer?


Al insertar los valores de los atributos de la clave externa, primero verifique el tipo de atributos, así como el valor del atributo de la clave primaria en la relación padre, si los valores en la relación padre coinciden, entonces puede insertar / actualizar fácilmente valores de atributo secundarios.


Debe eliminar datos en la tabla secundaria que no tiene ningún valor de clave externa correspondiente a la clave principal primaria de tabla. O elimine todos los datos de la tabla secundaria y luego inserte datos nuevos con el mismo valor de clave externa que la clave primaria en la tabla principal . Eso debería funcionar


Obtendrá esta comprobación de restricciones porque la tabla ordre no tiene una ID de orden de referencia proporcionada en el comando Insertar.

Para insertar valor en ordrelinje, primero debe ingresar el valor en la tabla ordre y usar el mismo ordreID en la tabla orderlinje.

O puede eliminar la restricción no nula e insertar un valor NULO en ella.


Su tabla ORDRELINJE está vinculada con la tabla ORDER utilizando una restricción de constraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID) según el cual Ordre int NOT NULL, columna de tabla ORDRELINJE debe coincidir con cualquier Ordre int NOT NULL, columna de tabla ORDER .

Ahora, lo que está sucediendo aquí es que cuando está insertando una nueva fila en la tabla ORDRELINJE , de acuerdo con la restricción fk Ordrelinje_fk está verificando la tabla ORDER si el OrdreID está presente o no, y como no se corresponde con ningún OrderId, el compilador se queja de una clave externa violación. Esta es la razón por la que está recibiendo este error.

La clave externa es la clave principal de la otra tabla que utiliza en cualquier tabla para vincular ambas. Esta clave está vinculada por la restricción de clave externa que especifique al crear la tabla. Cualquier operación en los datos no debe violar esta restricción. La violación de esta restricción puede provocar errores como este.

Espero haber dejado en claro.


Tomado de Usar Restricciones de LLAVE EXTRAÑA

Las relaciones de clave externa implican una tabla padre que contiene los valores de datos centrales, y una tabla secundaria con valores idénticos que apuntan a su padre. La cláusula FOREIGN KEY se especifica en la tabla secundaria.

Rechazará cualquier operación INSERT o UPDATE que intente crear un valor de clave externa en una tabla secundaria si no hay un valor de clave candidato coincidente en la tabla principal.

Por lo tanto, su error Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails esencialmente significa que está tratando de agregar una fila a su tabla Ordrelinje para la cual no hay una fila coincidente (OrderID) presente en la tabla Ordre .

Primero debe insertar la fila en su tabla Ordre .