Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2006, 14h49   #1
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Par défaut [Mysql5] Erreur pour poser une clé étrangère

Bonjour,

Je n'arrive pas a placer une contrainte étrangère sur une table.

Voici le schéma des tables

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE  `characters` (
  `account_name` varchar(45) DEFAULT NULL,
  `obj_Id` decimal(11,0) NOT NULL DEFAULT '0',
  `char_name` varchar(35) NOT NULL,
  PRIMARY KEY  (`obj_Id`),
  KEY `account_name` (`account_name`),
  KEY `char_name` (`char_name`),
  CONSTRAINT `FK_characters_1` FOREIGN KEY (`account_name`) REFERENCES `accounts` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
 
 
 
CREATE TABLE  `items` (
  `owner_id` int(11) DEFAULT NULL,
  `object_id` int(11) NOT NULL DEFAULT '0',
  `item_id` int(11) DEFAULT NULL,
  PRIMARY KEY  (`object_id`),
  KEY `key_owner_id` (`owner_id`),
  KEY `key_item_id` (`item_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
C'est un schéma simplifié, j'ai tenu a garder un exemple simple.

Lorsque je fais le alter table, j'ai sans arrêt l'erreur suivante :

Mysql error number 1005
Cant' create table '.\l2jdb#sql-47c_em.frm '(errno 150)

J'ai déjà réussi a positionner une clé étrangère sur une autre table. Quelqu'un a une idée ? C'est ma base qui a un souci ou c'est moi qui m'y prends mal ?
Je tente de créer une clé étrangère sur la table items, de owner_id vers object_id de characters.
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 15h53   #2
Débutant
 
Homme
Inscription : janvier 2004
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2004
Messages : 435
Points : 245
Points : 245
SAlut hugo123

Si j'ai compris ce que tu demande
tu veu faire un lien entre tes 2 table mais regarde dans ta ligne :

Code :
1
2
 
CONSTRAINT `FK_characters_1` FOREIGN KEY (`account_name`) REFERENCES `accounts` (`login`)

tu fai reference à une table accounts et non à ta table items

corrige ca proviens peu etre de ca
moulefrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 16h59   #3
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
c'est une clé déjà existante, moi je veux en rajouter une autre avec un ALTER TABLE. J'utilise mysql administrator pour ca.
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 17h03   #4
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Tout simplement, imaginons que je créé une table Item2 comme suite :


Code :
1
2
3
4
5
6
7
8
9
CREATE TABLE  `items2` (
  `owner_id` int(11) DEFAULT NULL,
  `object_id` int(11) NOT NULL DEFAULT '0',
  `item_id` int(11) DEFAULT NULL,
  PRIMARY KEY  (`object_id`),
  KEY `key_owner_id` (`owner_id`),
  KEY `key_item_id` (`item_id`),
  CONSTRAINT `FK_items_1` FOREIGN KEY (`owner_id`) REFERENCES `characters` (`obj_Id`)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
ca plante avec la même erreur
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 17h14   #5
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
C'est apparemment un sujet qui revient souvent sur le net :

http://bugs.mysql.com/bug.php?id=3491
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 17h19   #6
Débutant
 
Homme
Inscription : janvier 2004
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2004
Messages : 435
Points : 245
Points : 245
voila un exemple de table avec 2 clé etrangere :

Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `table1` (
  `cle1` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `cle_etrangere1` int(10) UNSIGNED NOT NULL,
  `cle_etrangere2` int(10) UNSIGNED DEFAULT NULL,
  `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY  (`cle1`),
  KEY `idbadge` (`cle_etrangere1`),
  KEY `idreaders` (`cle_etrangere2`),
  CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`cle_etrangere1`) REFERENCES `table2` (`cle2`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `table1_ibfk_2` FOREIGN KEY (`cle_etrangere2`) REFERENCES `table3` (`cle_etrangere2`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
Voila moi ca fonctionne tres bien si j'utilise ca sous mysqlquerybrowser
moulefrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 18h02   #7
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
et la table 2, peux tu poster l'exemple qui fonctionne ?

La seule différence que je vois c'est le COLLATE en binaire pour l'instant.
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2006, 19h45   #8
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Code :
1
2
3
 
Mysql error number 1005
Cant' create table '.\l2jdb#sql-47c_em.frm '(errno 150)
Bonjour,

Cette question revient souvent Et la première fois que je l'ai eu, j'ai cherché un moment. Vérifiez qe les deux champs à lier via la requête sont bien STRICTEMENT identique.

Je n'ai pas compris un truc quel est précisément la contrainte que vous souhaitez rajouter ? Pouvez vous nous retourner le source (via SHOW CREATE TABLE) des deux tables à relier ?
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 09h43   #9
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Les deux schémas de table sont plus haut, et effectivement :

`obj_Id` decimal(11,0) NOT NULL DEFAULT '0',

et
`owner_id` int(11) DEFAULT NULL,

Ne sont pas vraiment identiques pour le moins. Je vais tenter après les avoir convertis (l'un ou l'autre)
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 13h21   #10
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Effectivement, en changeant les types (j'y avais pas fait attention), ca marche correctement.
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h56.


 
 
 
 
Partenaires

Hébergement Web