8
votes

La contrainte de clé étrangère échoue avec "Erreur lors de la création de la clé étrangère sur [Tableau] (Vérifier les types de données)"

La requête suivante échoue avec une erreur "Erreur lors de la création de la clé étrangère sur la ville (Vérifier les types de données)": xxx

essentiellement, je veux avoir une relation ony-à-plusieurs entre ville.id et hôtels.City.

Voici les deux tables: xxx


4 commentaires

Les tables ont-elles déjà des données dans elles?


Les hôtels sont vides, la ville a des rangées déjà contraintes avec une autre table (restaurants) de la même manière que j'essaie d'hôtels ci-dessus. Cela a fonctionné la première fois, mais j'ai construit la requête à la main sans utiliser phpmyadmin.


L'un est int , l'autre Bigint .


Avez-vous lu le message d'erreur? Il contient les informations pour résoudre le problème.


7 Réponses :


20
votes

Les types de données doivent correspondre:

cities.id int(11)
hotels.city int(11)


4 commentaires

À droite. J'ai modifié par erreur le type de données d'hôtels.ID pour correspondre aux villes.ID sans se rendre compte que la relation est dans Hotels.City. Merci pour la solution!


@Victorauugusto J'ai mentionné que dans la dernière ligne de la réponse.


Signé ou non signé


Remarque: Faites correspondre la valeur d'attribut également. comme non signé ou tout autre que vous avez dans la table parent de la colonne



5
votes

Je sais que cela a été répondu et je sais que cette question est ancienne. Cependant, je viens de rencontrer cette même erreur avec une cause différente et, étant donné que c'est le résultat supérieur de cette erreur, j'ai pensé que je voudrais mettre ces informations ici pour ma propre usage dans l'avenir ainsi que quiconque qui se passe après moi.

Mes colonnes étaient à la fois de Bigint et non signées. Cependant, après avoir créé les tables référencées, je modifierai ensuite le nom de la colonne principale. Rien d'autre à ce sujet n'avait changé, mais je n'ai pas pu créer une relation clé étrangère. J'ai fini par laisser tomber les tables référencées et les recréer à l'aide des noms de colonne que je souhaite et j'ai pu créer les relations clés étrangères.


3 commentaires

Pourquoi ne pas simplement recréer la relation FK elle-même?


J'étais complètement incapable de créer une relation FK après avoir changé le nom des champs principaux de la clé de quelques tables. La seule solution que j'avais était de laisser tomber les tables et de les reconstituer. Après cela, j'ai pu créer la relation FK que je voulais.


Je viens de découvrir que si vous optimisez les tables après avoir apporté ces modifications, cela vous permettra de créer les relations de clé étrangère sans laisser tomber les tables.



4
votes

mérite de mentionner, mais la classement doit être la même entre les deux table

J'ai fait face au même problème avec Varchar (64) champs dans les deux tables, et il m'a fallu du temps pour identifier le problème provenant du champ de collement qui n'était pas la même entre les 2 champs de table.


1 commentaires

Merci. Obtenez cette erreur sur 2 (10) champs d'INT (10) qui étaient évidemment les mêmes. N'aya même pas considéré que la classement de table étant un problème, mais apparemment c'est!



11
votes

J'utilisais phpmyadmin et j'ai essayé de créer plusieurs indices sur des tables différentes en utilisant la vue relative aux relations. Cependant, j'ai eu la même erreur disant que les fichiers de données ne correspondaient pas. Cependant, la cause était en effet que je donnais le même nom de clé étrangère aux relations multiples et en raison de noms en double, MySQL a lancé cette erreur. Alors renommez votre relation, et cela devrait fonctionner correctement.

 Ajout de clé étrangère dans la vue des relations


8 commentaires

est cette réponse ou commentaire?


Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements d'un auteur, laissez un commentaire sous leur poste - vous pouvez toujours commenter vos propres messages, et une fois que vous avez suffisamment Réputation Vous serez en mesure de Commentaire sur n'importe quel message . - de l'avis


Ce n'est pas un commentaire, plutôt une réponse probable à ce problème


Moi aussi. J'ai tout vérifié. Le problème était de la similitude du nom de la contrainte de clé étrangère avec une autre table. Merci vous, vous êtes héros me sauver des heures.


C'est une réponse pour ma solution aussi


T'aime frère <3


CELA MARCHE. Merci.


Merci beaucoup!



1
votes

Mise à jour Hotels.City to Unsigned a travaillé pour moi. Parce que villes.id est non signé


0 commentaires

11
votes

Je sais que c'est un vieux fil, mais j'ai également passé du temps avec cette erreur aussi.

La situation que j'avais était la suivante:

Tableau 1: Administrations (clé primaire: administrateur) Tableau 2: Factures (Clé étrangère à Administrateur) Tableau 3: Utilisateurs (erreur apparaît lors de la création de la clé étrangère)

Le Colomns AdministratriceId dans mes factures et Les utilisateurs ont été à la fois du même type que la colonne administrateur Dans la table administrations .

L'erreur de mon côté était que j'ai essayé de créer une clé étrangère appelée admin_id dans mes utilisateurs Table. Mais une minute avant que j'ai déjà créé une clé étrangère dans mes factures appelées également admin_id . Quand j'ai essayé de donner à la clé étrangère un autre nom, cela a fonctionné bien.

Par conséquent, gardez à l'esprit à nommer correctement vos touches étrangères (par exemple, préfixez-les avec le nom de la table, par exemple: factures_administration_id et users_administration_id ). Plusieurs clés étrangères avec le même nom peuvent ne pas exister (dans la même base de données).


1 commentaires

Merci pour la suggestion. Un autre modèle de dénomination commun que j'ai vu des clients MySQL utilisez-eux eux-mêmes lors de la génération automatique des noms FK, créés via l'interface utilisateur: Sourcetablename_targettablename_fk_1



0
votes

Type de données Udating Villes.Id Bigint (20) et Hôtels.City Bigint (20) OU Udating Type de données villes.Id int (11) et hotels.City int (11) ET Mise à jour Hôtels.City à Unsigned car villes.Id est non signé . .


0 commentaires