Problème clés étrangères MySQL

Bonjour,

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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. 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 genre
    UPDATE villes SET ID_province = 3 WHERE ID_ville IN (1, 2, 4);

    Tu as beaucoup de données à mettre à jour ?

    Xavier
    0
    1. En fait, je veux juste pouvoir prendre l'ID_province qui se situe dans une autre table pour pouvoir importer toutes les données de villes.
      Je n'ai aucunes donnée pour villes pour l'instant en fait.
      Et j'ai 22 valeurs à faire coïncider avec les données ville que je rentrerai.
      0
    2. 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.
      0
    3. 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
      0
    4. Je vois donc je n'ai plus qu'à les rentrer à la main..
      Malheureusement ce sont des données de "masse" (1.5 millions à traiter et organiser)
      Merci à toi
      0
    5. Modérateur
      @PauloTu rends le champ non obligatoire
      0
  2. Modérateur
    Bonjour,

    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
    0
    1. Je suis désolé mais ça ne me ramène pas cette erreur la, ça ne me ramène même aucunes erreur, il traite juste aucunes ligne.
      0