web-dev-qa-db-fra.com

1452 - Impossible d'ajouter ou de mettre à jour une ligne enfant: échec d'une contrainte de clé étrangère

Je reçois cette erreur: 

1452 - Impossible d'ajouter ou de mettre à jour une ligne enfant: contrainte de clé étrangère échoue.

Je les ai localisés et j'essaie de me débarrasser des références avec

alter table tillhör drop foreign key kat_id;

Mais obtenir cette erreur à la place:

# 1025 - Erreur lors du changement de nom de '.\Recept\tillh @ 1ir' en '.\recept # sql2-1570-3cb' (numéro d'erreur: 152).

Qu'est-ce que je fais mal?

16
Mia Raunegger

Avant de lancer la requête

SET FOREIGN_KEY_CHECKS=0

puis réglez-le sur 1 une fois que vous avez terminé.

37
Mihai

Je fais face au même problème. Je résous ce problème en effaçant, c’est-à-dire en supprimant toutes les données de la table enfant et avec succès. 

Cela se produit si la table enfant contient des données avec la clé étrangère qui ne figurent pas dans la table parent, c’est-à-dire s’il existe deux tables appelées Person (avec l’identificateur de colonne, nom, adresse) et order (avec identifiant de colonne, id_personne, nom_commande); order.person_id est la clé étrangère de person.id et la table order contient person_id qui n'est pas présent dans la table person

Vous pouvez résoudre ceci en utilisant la requête suivante

Delete from order where person_id NOT IN (select id from person where person.id = order.person_id)
13
Jakir Hosen Khan

Lorsque j'ai eu ce problème, c'est parce que j'ai oublié de spécifier NULLS autorisé lors de la création des champs de clé étrangère. Je l'ai changé après le fait, mais les 0 étaient déjà dans la valeur. Il n'a pas pu trouver 0 dans la table correspondante et a ensuite donné cette erreur. Le correctif: mettez à jour les valeurs zéro en null.

6
Cymbals

Vous devez définir des valeurs null dans les tables parent à enfant Vous pouvez également définir les mêmes valeurs, par exemple Table enfant d'abord nam = Derick.

0
derick