Problème clés étrangères MySQL
Actuellement entrain de "créer" une BDD sur phpmyadmin je rencontre un problème avec les clés étrangères, en fait plusieurs de mes tables sont liés entre elles par une clé étrangère mais celle-ci ne s'incrit pas, alors que dans la table où c'est une clé primaire elle existe.
Et étant donné que je ne peux pas importer de données dans une table où toutes les colonnes ne se complète pas, je suis complètement bloqués.
J'ai essayé de les faire venir "à la main" en utilisant ces lignes :
UPDATE villes
SET ID_province = (
SELECT ID_province
FROM provinces
)
Mais elles ne retournent rien..
Si quelqu'un a une réponse ça m'aiderai beaucoup.
Merci d'avance
2 réponses
Blocage des clés étrangères lors de la création d'une BDD sous phpMyAdmin: les liens entre Provinces et Villes ne s'inscrivent pas malgré l'existence des IDs dans les tables. Des conseils évoquent d'importer Provinces avant Villes, d'organiser les données et d'utiliser des CSV correctement formatés, ou d'ajuster les ID_province lors d'importations répétées pour éviter les incohérences. D'autres proposent d'examiner manuellement les IDs et de vérifier la cohérence des données sur un petit échantillon, avant de réimporter l'ensemble des tables entièrement. Une révision révèle que les ID_province saisis étaient incorrects, ce qui explique le non-alignement des clés étrangères et souligne l'importance de valider les correspondances d'ID avant l'import.
-
Bonjour,
Dans la requête que tu donnes, comment MySQL peut-il savoir quelle province correspond à quelle ville ?
Il faut être plus précis, du genreUPDATE villes SET ID_province = 3 WHERE ID_ville IN (1, 2, 4);
Tu as beaucoup de données à mettre à jour ?
Xavier-
-
Modérateur@PauloLa machine ne va pas deviner que telle ville est dans telle province, il faut soit un critère, soit mettre la valeur province dans le fichier que tu importes.
-
Et bien il faudra alors faire quelque chose comme ça :
- Si tu connais le code de la province (dans l’exemple, 8) :INSERT INTO Villes (Nom, ID_Province) VALUES ('Une Ville', 8)
- Si tu ne connais que son nom :INSERT INTO Villes (Nom, ID_Province) SELECT 'Une Ville', ID FROM Provinces WHERE Nom = 'Nom Province'
Xavier -
-
Modérateur@PauloTu rends le champ non obligatoire
-
-
ModérateurBonjour,
Ta requête est incomplète, puisque si la table provinces contient 20 lignes tu essaies de mettre à jour le champ avec 20 valeurs.
D'ailleurs tu devrais avoir une erreur du type "la sous-requete ramène plus d'une ligne". Dans ta sous requête il faut un critère pour ramener la province qui correspond à la ville.
Cdlt