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 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 trato de insertar valores en la ORDRELINJE
tabla obtengo:
Código de error: 1452. No se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa (
srdjank
.Ordrelinje
, REFERENCIASOrdrelinje_fk
DE LLAVE EXTRANJERA DE RESTRICCIÓN (Ordre
)Ordre
(OrdreID
))
He visto las otras publicaciones sobre este tema, pero no tuve suerte. ¿Estoy supervisando algo o alguna idea de qué hacer?
mysql
sql
mariadb
mysql-error-1452
usuario3289677
fuente
fuente
Respuestas:
Tomado del uso de restricciones de CLAVE EXTRANJERA
Por lo tanto, su error
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
esencialmente significa que está intentando agregar una fila a suOrdrelinje
tabla para la cual no hay una fila coincidente (OrderID) en laOrdre
tabla.Primero debe insertar la fila en su
Ordre
tabla.fuente
Está obteniendo esta verificación de restricción porque la
Ordre
tabla no tiene referenciaOrdreID
proporcionada en el comando de inserción.Para insertar valor en
Ordrelinje
, primero debe ingresar el valor en laOrdre
tabla y usarloOrdreID
enOrderlinje
tabla.O puede eliminar la restricción no nula e insertar un valor NULL en ella.
fuente
Debe eliminar los datos de la tabla secundaria que no tengan ningún valor de clave externa correspondiente a la clave primaria de la tabla primaria. O bien, elimine todos los datos de la tabla secundaria e inserte nuevos datos que tengan el mismo valor de clave externa que la clave primaria en la tabla primaria. . Eso debería funcionar . Aquí también un video de youtube
fuente
El problema es con la restricción de CLAVE EXTRANJERA. Por defecto (SET FOREIGN_KEY_CHECKS = 1). La opción FOREIGN_KEY_CHECKS especifica si se comprueban o no las restricciones de clave externa para las tablas InnoDB. MySQL - SET FOREIGN_KEY_CHECKS
Podemos configurar la verificación de clave externa como deshabilitada antes de ejecutar la consulta. Deshabilitar clave externa .
Ejecute una de estas líneas antes de ejecutar su consulta, luego puede ejecutar su consulta con éxito. :)
1) Para sesión (recomendado)
2) a nivel mundial
fuente
Este error generalmente ocurre porque tenemos algunos valores en el campo de referencia de la tabla secundaria, que no existen en el candidato / referenciado campo de la tabla primaria.
A veces, podemos obtener este error cuando estamos aplicando restricciones de clave externa a las tablas existentes, que ya tienen datos en ellas . Algunas de las otras respuestas sugieren eliminar los datos completamente de la tabla secundaria y luego aplicar la restricción. Sin embargo, esta no es una opción cuando ya tenemos datos de trabajo / producción en la tabla secundaria. En la mayoría de los escenarios, necesitaremos actualizar los datos en la tabla secundaria (en lugar de eliminarlos).
Ahora, podemos utilizar
Left Join
para encontrar todas esas filas en la tabla secundaria, que no tiene valores coincidentes en la tabla primaria. La siguiente consulta sería útil para obtener esas filas no coincidentes:Ahora, generalmente puede hacer uno (o más) de los siguientes pasos para corregir los datos.
null
también.Una vez que los datos están corregidos, podemos aplicar la restricción de clave externa utilizando la
ALTER TABLE
sintaxis.fuente
en la tabla de clave externa tiene un valor que no pertenece a la tabla de clave primaria que estará relacionado, por lo que primero debe eliminar todos los datos / ajustar el valor de su tabla de clave externa de acuerdo con el valor que está en su clave primaria
fuente
Estaba teniendo este problema a pesar de que mi tabla principal tenía todos los valores a los que hacía referencia en mi tabla secundaria. El problema parecía ser que no podía agregar múltiples referencias secundarias a una sola clave externa. En otras palabras, si tenía cinco filas de datos referenciadas a la misma clave foránea, MySQL solo me permitía cargar la primera fila y me daba el error 1452.
Lo que funcionó para mí fue escribir el código "SET GLOBAL FOREIGN_KEY_CHECKS = 0". Después de eso, cerré MySQL y luego lo reinicié y pude cargar todos mis datos sin errores. Luego escribí "SET GLOBAL FOREIGN_KEY_CHECKS = 1" para restablecer el sistema a la normalidad, aunque no estoy completamente seguro de lo que hace FOREIGN_KEY_CHECKS. ¡Espero que esto ayude!
fuente
Esto se puede solucionar insertando los registros respectivos en la tabla principal primero y luego podemos insertar registros en la columna respectiva de la tabla secundaria. Compruebe también el tipo de datos y el tamaño de la columna. Debe ser igual a la columna de la tabla principal, incluso el motor y la clasificación también deben ser iguales. ¡PRUEBA ESTO! Así es como resolví el mío. Corrígeme si me equivoco.
fuente
Su
ORDRELINJE
tabla está vinculada con laORDER
tabla utilizando una restricción de clave externaconstraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)
según laOrdre int NOT NULL,
columna de la tabla queORDRELINJE
debe coincidir con cualquierOrdre int NOT NULL,
columna de laORDER
tabla.Ahora, lo que está sucediendo aquí es que, cuando está insertando una nueva fila en la
ORDRELINJE
tabla, de acuerdo con la restricción fkOrdrelinje_fk
, está verificando laORDER
tabla siOrdreID
está presente o no y, dado que no coincide con ningún OrderId, el compilador se queja de una violación de clave externa. Esta es la razón por la que recibe este error.La clave externa es la clave principal de la otra tabla que utiliza en cualquier tabla para vincular entre ambas. Esta clave está vinculada por la restricción de clave externa que especifica 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 haberlo dejado claro.
fuente
Al insertar los valores de atributo de clave externa, primero verifique el tipo de atributo, así como el valor de atributo de clave principal en la relación principal, si los valores en la relación principal coinciden, entonces puede insertar / actualizar fácilmente los valores de atributo secundario.
fuente
debe agregar datos de la CLAVE DE REFERENCIAS en la TABLA PRIMARIA a la CLAVE EXTRANJERA en la TABLA DE NIÑOS,
esto significa que no debe agregar datos aleatorios a la clave externa ، solo use los datos de la clave primaria que sea accesible
descripción de datos en clave foránea
fuente
Esto me ayudó después de leer las respuestas de @ Mr-Faizan y otras.
en phpMyAdmin y presione la consulta. No sé acerca de WorkBench, pero las otras respuestas pueden ayudarte.
fuente
debe insertar al menos una materia prima en cada tabla (las que desea que apunten las claves foráneas) y luego puede insertar o actualizar los valores de las claves foráneas
fuente
voy a exprimir esto aquí: mi caso estaba tratando de crear un me gusta para una publicación que no existe; al comprometerse con la base de datos, se produjo el error. La solución fue crear primero la publicación y luego darle me gusta. desde mi punto de vista, si post_id se iba a guardar en la tabla de me gusta, primero tenía que verificar con la tabla de publicaciones para determinar la existencia. me pareció mejor tenerlo de esta manera ya que es más lógico para mí de esa manera ...
fuente
Cuando usa una clave externa , su orden de columnas debe ser el mismo para la inserción .
Por ejemplo, si va a añadir
(userid, password)
en la tabla 1 de la Tabla 2 a continuación, a partir tabla2 orden debe ser el mismo(userid, password)
y no como(password,userid)
dondeuserid
es clave externa en la Tabla 2 de la tabla 1 .fuente
El problema se produce porque establece la clave externa en la tabla secundaria después de insertar algunos datos en la tabla secundaria.
Intente eliminar todos los datos de la tabla secundaria, luego configure la clave externa y luego agregue / inserte los datos en la tabla, funcionará.
fuente
verifica el no. de registro en la tabla primaria que coincide con la tabla secundaria y también la clave primaria debe coincidir con la referencia de clave externa. Esto funciona para mi.
fuente
Está 100% funcionando ...
ERROR 1452: no se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa ... si se produce este tipo de error: en primer lugar, vaya a esta tabla y compruebe la configuración> si Motor es: InnoDB y luego cambie su a MyISAM
(y eliminar referencias restricciones externas)
fuente