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 04/06/2007, 18h17   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 15
Points : 2
Points : 2
Par défaut problème concernant foreign key de type InnoDB

version mysql 4.1.9, phpMyAdmin 2.6.1
message d'erreur :

#1005 - Ne peut créer la table '.\alsaservice\categorie.frm' (Errcode: 150) ??
Toutes les tables sont en InnoDB
je m'aperçois que le message s'adresse surtout à la table categorie, car quand je la supprime je n'ai plus aucun problèmes. J'ai bien l'index, j'ai vérifié l'emplacement des tables
Où est le problème?

voici mes tables en fichier.txt :

CREATE TABLE IF NOT EXISTS userstype
(
iduserstype int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
denominationusers varchar(20) NOT NULL,
PRIMARY KEY(iduserstype)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS usersevaluation
(
idusersevaluation int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
note int(2) NOT NULL,
commentairenote varchar(30) NULL,
PRIMARY KEY(idusersevaluation)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS userslogin
(
iduserslogin int(8) UNSIGNED ZEROFILL NOT NULL auto_increment,
stringuserslog binary(8) NOT NULL,
PRIMARY KEY(iduserslogin)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS userspassword
(
iduserspassword int(8) UNSIGNED ZEROFILL NOT NULL auto_increment,
stringuserspassword binary(8) NOT NULL,
PRIMARY KEY(iduserspassword)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS service
(
idservice int(2) UNSIGNED NOT NULL,
designationservice varchar(25) NOT NULL,
PRIMARY KEY(idservice)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS modepaiement
(
idtypepaiement int(2) UNSIGNED ZEROFILL NOT NULL,
paiementcheque tinyint(1) NOT NULL,
paiementcarte tinyint(1) NOT NULL,
prelevement tinyint(1) NOT NULL,
PRIMARY KEY(idtypepaiement)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS prestation
(
idprestation int(2) UNSIGNED ZEROFILL NOT NULL,
designationprestation varchar(30) NOT NULL,
PRIMARY KEY(idprestation)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS department
(
iddepartment int(2) NOT NULL auto_increment,
namedepartment varchar(20) NOT NULL,
numberdepartment int(2) NOT NULL,
PRIMARY KEY(iddepartment)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS ville
(
idville int(6) UNSIGNED ZEROFILL NOT NULL auto_increment,
nameville varchar(30) NOT NULL,
cpville int(5) NOT NULL,
department_id int(2) NOT NULL default'',
index(department_id),
PRIMARY KEY(idville),
FOREIGN KEY (department_id) REFERENCES department(iddepartment) ON DELETE CASCADE
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS categorie
(
idcategorie int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
namecategorie varchar(30) NOT NULL,
service_id int(2) NOT NULL default'',
index(service_id),
PRIMARY KEY(idcategorie),
FOREIGN KEY (service_id) REFERENCES service(idservice) ON DELETE CASCADE
)TYPE=InnoDB;
cel.Saint-Louis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h10   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 423
Points : 6 423
Citation:
Envoyé par cel.Saint-Louis
CREATE TABLE IF NOT EXISTS categorie
(
idcategorie int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
namecategorie varchar(30) NOT NULL,
service_id int(2) NOT NULL default'',
index(service_id),
PRIMARY KEY(idcategorie),
FOREIGN KEY (service_id) REFERENCES service(idservice) ON DELETE CASCADE
)TYPE=InnoDB;
Dans le champ "service_id", qui est un entier, tu mets une chaîne vide comme valeur par défaut. Ca m'étonnerait que ça lui plaise, à MySQL

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h26   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 15
Points : 2
Points : 2
Par défaut problème concernant foreign key de type InnoDB

j'ai essayé, ça ne fonctionne toujours pas :

CREATE TABLE IF NOT EXISTS categorie(

idcategorie int( 2 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT ,
namecategorie varchar( 30 ) NOT NULL ,
service_id int( 2 ) NOT NULL ,
INDEX ( service_id ) ,
PRIMARY KEY ( idcategorie ) ,
FOREIGN KEY ( service_id ) REFERENCES service( idservice )
) TYPE = InnoDB;

toujours la même erreur!
cel.Saint-Louis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h56   #4
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
Citation:
Envoyé par Aide MySQL
Les deux tables doivent être de type InnoDB, dans la table, il doit y avoir un INDEX où les clés étrangères sont listées comme première colonne, dans le même ordre, et dans la table référencée, il doit y avoir un INDEX où les colonnes référencées sont listées comme premières colonnes, dans le même ordre. Les préfixes d'index ne sont pas supportés pour les clés de contrainte.

InnoDB ne crée pas automatiquement les index nécessaires pour les clés étrangères : vous devez ls créer vous-même.
__________________
"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 00
Vieux 04/06/2007, 23h27   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 15
Points : 2
Points : 2
je suis d'accord avec ton tutoriel,
j'ai bien créer l'index (service_id) avant de référencer la clé étrangère dans la table categorie.
Pour la colonne référencée, si j'ai bien compris les nombreux tutoriels lus, comme il s'agit d'une clé primaire(idservice), je n'ai pas besoin d'index.
Toutes mes tables sont en InnoDB car mon fichier my.ini a été reconfiguré initialement. En fait si j'enlève uniquement la contrainte foreign key, la table se crée avec l'index.
Pour les table précédentes ville et department j'ai effectué les mêmes opérations et ça fonctionne, c'est pour ça que je ne comprends pas.


CREATE TABLE IF NOT EXISTS service
(
idservice int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
designationservice varchar(25) NOT NULL,
PRIMARY KEY(idservice)
)TYPE=InnoDB;


CREATE TABLE IF NOT EXISTS department
(
iddepartment int(2) NOT NULL auto_increment,
namedepartment varchar(20) NOT NULL,
numberdepartment int(2) NOT NULL,
PRIMARY KEY(iddepartment)
)TYPE=InnoDB;

CREATE TABLE IF NOT EXISTS ville
(
idville int(6) UNSIGNED ZEROFILL NOT NULL auto_increment,
nameville varchar(30) NOT NULL,
cpville int(5) NOT NULL,
department_id int(2) NOT NULL,
index(department_id),
PRIMARY KEY(idville),
FOREIGN KEY (department_id) REFERENCES department(iddepartment) ON DELETE CASCADE
)TYPE=InnoDB;


CREATE TABLE IF NOT EXISTS categorie
(
idcategorie int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
namecategorie varchar(30) NOT NULL,
service_id int(2) NOT NULL,
index(service_id),
PRIMARY KEY(idcategorie),
FOREIGN KEY (service_id) REFERENCES service(idservice)
)TYPE=InnoDB;
cel.Saint-Louis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 08h36   #6
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
Le champ SERVICE.idservice est "UNSIGNED", alors que celui de la table catégorie n'a pas cette propriété.

En mettant la même configuration des deux côtés, ça fonctionne...
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 19h16   #7
Invité de passage
 
Inscription : novembre 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 15
Points : 2
Points : 2
Par défaut problème concernant foreign key de type InnoDB

concernant UNSIGNED ZEROFILL la table categorie autant que la table service possèdent cette propriété, c'est plutôt la table department qui n'est pas UNSIGNED mais cette table est référencée par la FOREIGN KEY de la table ville
cel.Saint-Louis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 21h08   #8
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
Citation:
Envoyé par cel.Saint-Louis
concernant UNSIGNED ZEROFILL la table categorie autant que la table service possèdent cette propriété,
Ce n'est pas ce que suggère ton script....
Code :
1
2
3
CREATE TABLE IF NOT EXISTS service
(
idservice int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
Code :
1
2
3
4
5
CREATE TABLE IF NOT EXISTS categorie
(
idcategorie int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
namecategorie varchar(30) NOT NULL,
service_id int(2) NOT NULL,
__________________
"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 00
Vieux 05/06/2007, 23h30   #9
Invité de passage
 
Inscription : novembre 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 15
Points : 2
Points : 2
Par défaut problème concernant foreign key de type InnoDB

merci de ta réponse, je pensais que les propriétés communes obigatoires étaient la valeur, taille et propriété NOT NULL
cel.Saint-Louis 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 07h45.


 
 
 
 
Partenaires

Hébergement Web