Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 27/12/2011, 21h40   #1
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Par défaut #1005 - Can't create table 'Texloud.tree_elements' (errno: 150)

Le bien bonjour à toutes et à tous, voilà j'arrive pas à crée deux tables avec clef étranger voilà mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilsateur` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `prenom` varchar(255) NOT NULL,
  `sex` varchar(255) NOT NULL,
  `datenaissance` date NOT NULL,
  `adresse` varchar(255) NOT NULL,
  `codepostal` varchar(255) NOT NULL,
  `ville` varchar(255) NOT NULL,
  `pays` varchar(255) NOT NULL,
  `identifiant` varchar(255) NOT NULL,
  `motpasse` varchar(255) NOT NULL,
  `motpassedeux` varchar(255) NOT NULL,
  `mail` varchar(255) NOT NULL,
  PRIMARY KEY (`idutilsateur`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
 
 
 
 CREATE TABLE  `tree_elements` (
 `Id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `name` varchar(45) NOT NULL,
 `position` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `ownerEl` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'parent',
 `slave` BINARY(1) NOT NULL DEFAULT '0',
  `utilisateur_id` int(11) UNSIGNED,
 PRIMARY KEY  (`Id`),
 FOREIGN KEY (`utilisateur_id`) REFERENCES utilisateur(idutilisateur)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
La table utilisateur est déja crée mais quand je veux crée la table tree_elements sa donne l'erreur suivante
1005 - Can't create table 'Texloud.tree_elements' (errno: 150)

Merci d'avance
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 21h55   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Un classique ! Et manifestement, tu ne t'es pas donné la peine de chercher...
  1. les 2 tables en innodb: toi y en a qu'une
  2. la cle étrangère doit être de même type que la clé référencée: toi c'est pas le cas
  3. les colonnes doivent être indexées

La doc MySQL explique tout ça très bien, à condition de la lire.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/12/2011, 21h56   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Il faut que la colonne portant la clé étrangère soit indexée. Pas sûr que MySQL fasse cela automatiquement.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 22h34   #4
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Si j'ai bien compris voilà les modification que j'ai apporter
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilsateur` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `prenom` varchar(255) NOT NULL,
  `sex` varchar(255) NOT NULL,
  `datenaissance` date NOT NULL,
  `adresse` varchar(255) NOT NULL,
  `codepostal` varchar(255) NOT NULL,
  `ville` varchar(255) NOT NULL,
  `pays` varchar(255) NOT NULL,
  `identifiant` varchar(255) NOT NULL,
  `motpasse` varchar(255) NOT NULL,
  `motpassedeux` varchar(255) NOT NULL,
  `mail` varchar(255) NOT NULL,
  PRIMARY KEY (`idutilsateur`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
 
 
CREATE TABLE  `tree_elements` (
 `Id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `name` varchar(45) NOT NULL,
 `position` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `ownerEl` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'parent',
 `slave` BINARY(1) NOT NULL DEFAULT '0',
  `utilisateur_id` int(11),
INDEX ( `utilisateur_id` ),
 PRIMARY KEY  (`Id`),
 FOREIGN KEY (`utilisateur_id`) REFERENCES utilisateur(idutilisateur)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 22h35   #5
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Citation:
Envoyé par stade13 Voir le message
Si j'ai bien compris voilà les modification que j'ai apporter
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilsateur` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `prenom` varchar(255) NOT NULL,
  `sex` varchar(255) NOT NULL,
  `datenaissance` date NOT NULL,
  `adresse` varchar(255) NOT NULL,
  `codepostal` varchar(255) NOT NULL,
  `ville` varchar(255) NOT NULL,
  `pays` varchar(255) NOT NULL,
  `identifiant` varchar(255) NOT NULL,
  `motpasse` varchar(255) NOT NULL,
  `motpassedeux` varchar(255) NOT NULL,
  `mail` varchar(255) NOT NULL,
  PRIMARY KEY (`idutilsateur`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
 
 
CREATE TABLE  `tree_elements` (
 `Id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `name` varchar(45) NOT NULL,
 `position` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `ownerEl` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'parent',
 `slave` BINARY(1) NOT NULL DEFAULT '0',
  `utilisateur_id` int(11),
INDEX ( `utilisateur_id` ),
 PRIMARY KEY  (`Id`),
 FOREIGN KEY (`utilisateur_id`) REFERENCES utilisateur(idutilisateur)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
Mais sa ne marche pas
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 23h28   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Qu'est-ce qui ne marche pas exactement ? Soyez un peu précis c'est incompréhensible pour une personne extérieur à votre problème
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 23h54   #7
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Citation:
Envoyé par punkoff Voir le message
Qu'est-ce qui ne marche pas exactement ? Soyez un peu précis c'est incompréhensible pour une personne extérieur à votre problème
Voilà le code d'erreur

#1005 - Can't create table 'Texloud.tree_elements' (errno: 150)
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h03   #8
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 873
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 873
Points : 1 360
Points : 1 360
Citation:
Envoyé par CinePhil Voir le message
Il faut que la colonne portant la clé étrangère soit indexée. Pas sûr que MySQL fasse cela automatiquement.
si tu es en innodb, et que donc la déclaration est pleinement prise en compte pour la clé étrangère, il y a indexation automatique...

en myisam, ça serait moins sur... bien qu'il me semble que ce soit la seule chose qui est prise en charge dans la déclaration de la clé étrangère...

je le répéterais jamais assez: "google ou autre moteur de recherche peut être ton ami"

#erreur 1005: table non créée... code 150: problème lié à la définition de la contrainte sur la clé étrangère...

de plus, une bonne pratique est de nommer les index et contraintes... ça peut aider quand on regarde les structure de données...

vire l'index sur l'id utilisateur, il fait doublon avec la clé étrangère et peut engendrer le problème de contrainte d'intégrité, même si normalement non...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h18   #9
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Citation:
Envoyé par ericd69 Voir le message
si tu es en innodb, et que donc la déclaration est pleinement prise en compte pour la clé étrangère, il y a indexation automatique...

en myisam, ça serait moins sur... bien qu'il me semble que ce soit la seule chose qui est prise en charge dans la déclaration de la clé étrangère...
C'est le cas pour moi, les deux table sont innodb, mais sa ne marche pas
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h27   #10
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 873
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 873
Points : 1 360
Points : 1 360
vire l'index et, si ça marche toujours pas, regarde la définition de ta contrainte de clé étrangère et ce qui peut la violer...

essaye de faire une écriture de tes clé avec les noms, si possible normalisé pour avoir aussi une bonne habitude...


tu peux utiliser:
Code sql :
SHOW innodb STATUS;
...pour avoir la dernière erreur innodb
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 15h35   #11
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
J'ai trouvé la cause de ton erreur :
Code :
1
2
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilsateur` int(11) NOT NULL AUTO_INCREMENT,
Il manque un 'a' à idutilisateur !
Du coup, quand tu crées la clé étrangère faisant référence à la colonne idutilisateur, MySQL ne la trouve pas et retourne l'erreur mais sans expliquer pourquoi. Il devrait être un peu plus verbeux sur le coup !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 19h28   #12
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Citation:
Envoyé par CinePhil Voir le message
J'ai trouvé la cause de ton erreur :
Code :
1
2
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilsateur` int(11) NOT NULL AUTO_INCREMENT,
Il manque un 'a' à idutilisateur !
Du coup, quand tu crées la clé étrangère faisant référence à la colonne idutilisateur, MySQL ne la trouve pas et retourne l'erreur mais sans expliquer pourquoi. Il devrait être un peu plus verbeux sur le coup !
Oui t as raison, je l'ai vue c'est juste que je ne l'ai pas mis à jour sur le forum, mais sa ne donne rien
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 19h32   #13
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
En fait j'ai mal rédigé mon message, ce n'est pas le 'a' qu'il manque mais le second 'i' !

Je viens de tester en corrigeant et ça fonctionne chez moi ; les deux tables sont créées.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 21h14   #14
Futur Membre du Club
 
Homme
Etudiant
Inscription : octobre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 80
Points : 18
Points : 18
Citation:
Envoyé par CinePhil Voir le message
En fait j'ai mal rédigé mon message, ce n'est pas le 'a' qu'il manque mais le second 'i' !

Je viens de tester en corrigeant et ça fonctionne chez moi ; les deux tables sont créées.
Peux tu mettre en ligne le code s'il te plaît, étrange moi sa ne marche pas !
stade13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 22h05   #15
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
C'est ton code en corrigeant simplement le nom de la colonne dans la table utilisateur.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CREATE TABLE IF NOT EXISTS `utilisateur` (
  `idutilisateur` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `prenom` varchar(255) NOT NULL,
  `sex` varchar(255) NOT NULL,
  `datenaissance` date NOT NULL,
  `adresse` varchar(255) NOT NULL,
  `codepostal` varchar(255) NOT NULL,
  `ville` varchar(255) NOT NULL,
  `pays` varchar(255) NOT NULL,
  `identifiant` varchar(255) NOT NULL,
  `motpasse` varchar(255) NOT NULL,
  `motpassedeux` varchar(255) NOT NULL,
  `mail` varchar(255) NOT NULL,
  PRIMARY KEY (`idutilsateur`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
 
 
CREATE TABLE  `tree_elements` (
 `Id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `name` varchar(45) NOT NULL,
 `position` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `ownerEl` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'parent',
 `slave` BINARY(1) NOT NULL DEFAULT '0',
  `utilisateur_id` int(11),
INDEX ( `utilisateur_id` ),
 PRIMARY KEY  (`Id`),
 FOREIGN KEY (`utilisateur_id`) REFERENCES utilisateur(idutilisateur)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil 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 02h02.


 
 
 
 
Partenaires

Hébergement Web