IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils MySQL Discussion :

problème concernant foreign key de type InnoDB


Sujet :

Outils MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    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;

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    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
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    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!

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    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;

  6. #6
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 147
    Points
    147
    Par défaut
    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...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    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

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE IF NOT EXISTS service
    (
    idservice int(2) UNSIGNED ZEROFILL NOT NULL auto_increment,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec foreign keys sur plusieurs colonnes
    Par draghysck dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/10/2009, 14h27
  2. Problème de Foreign key
    Par noemie12 dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 28/09/2009, 13h29
  3. [SQL] FOREIGN KEY lors de la création de la base
    Par R.L. dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/05/2006, 15h36
  4. Problème avec foreign key
    Par bubi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2005, 16h03
  5. problème avec Foreign Key [Interbase 7.5] [Delphi 2005]
    Par xenos dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo