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

Requêtes MySQL Discussion :

Problème avec une FOREIGN KEY


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut Problème avec une FOREIGN KEY
    Bonjour, j'ai actuellement une table de créé et je voudrai créé une autres table avec un clé FOREIGN KEY sur la première table mais MYSQL me retourne une erreur 1005 ( errno 105 ). Selon le site de MySQL, cette erreur est du au
    FOREIGN KEY mais je ne sais pas pourquoi ????

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
     
     
    CREATE  TABLE IF NOT EXISTS `tlkTemplate` (
      `templateID` TINYINT UNSIGNED NOT NULL ,
      `templateName` VARCHAR(30) NOT NULL ,
      `image` VARCHAR(30) NULL ,
      PRIMARY KEY (`templateID`) ,
      UNIQUE INDEX `tlkTemplate_templateName_u` (`templateName` ASC) ,
      UNIQUE INDEX `tlkTemplate_image_u` (`image` ASC)
    )ENGINE = InnoDB;
     
     
    CREATE TABLE IF NOT EXISTS `tblUser` (
      `userID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
      `login` VARCHAR(15) BINARY NOT NULL ,
      `pseudo` VARCHAR(15) NOT NULL ,
      `email` VARCHAR(45) NOT NULL ,
      `password` CHAR(32) NOT NULL ,
      `dateInscription` DATE NULL ,
      `dateDerVisite` DATE NULL ,
      `sexe` ENUM('H','F') NOT NULL ,
      `dateNaissance` DATE NULL ,
      `nom` VARCHAR(45) NOT NULL ,
      `prenom` VARCHAR(45) NOT NULL ,
      `compteActif` ENUM('O','N') NULL DEFAULT 'N',
      `image` VARCHAR(20) NULL ,
      `newsLetters` ENUM('O','N') NULL DEFAULT 'O',
      `templateID` TINYINT UNSIGNED NOT NULL,
      UNIQUE INDEX `tblUser_login_u` (`login` ASC) ,
      UNIQUE INDEX `tblUser_pseudo_u` (`pseudo` ASC) ,
      UNIQUE INDEX `tblUser_email_u` (`email` ASC) ,
      PRIMARY KEY (`userID`),
      CONSTRAINT `tblUser_templateID_FK`
        FOREIGN KEY (`templateID` )
        REFERENCES `tlkTemplate` (`templateID` )
        ON DELETE SET NULL
        ON UPDATE NO ACTION
    )ENGINE = InnoDB;

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce n'est probablement pas dû à ça mais tu peux supprimer le ON UPDATE NO ACTION. Je ne vois pas l'intérêt de changer un id dans une table mère !
    Par contre, un index sur templateID serait peut-être utile.
    Je crois même que MySQL n'accepte les clés étrangères que sur les colonnes faisant partie d'un index.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 949
    Par défaut
    Un petit soucis en perspective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    `templateID` TINYINT UNSIGNED NOT NULL,
      ...
      CONSTRAINT `tblUser_templateID_FK`
        FOREIGN KEY (`templateID` )
        REFERENCES `tlkTemplate` (`templateID` )
        ON DELETE SET NULL
    et quand tu auras déclaré un index sur templateID, ça devrait aller mieux (avant la contrainte de FK)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    je vais aseiler ce soir mais je suis sure d'avoir lu dans la doc de MySQL ou dans le livre 'Mysql Le guide complet' que mysql créé automatiquement un index sur les colone Foreign key....

  5. #5
    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 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour,

    Pour avoir rencontré exactement la même erreur pas plus tard qu'hier soir, le problème vient du fait que tu mets 2 actions différentes sur ON DELETE et ON UPDATE, et ça, MySQL n'aime pas.
    Il faut donc mettre la même action (SET NULL ou NO ACTION à chacun, mais il faut le même sur les 2).

    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

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 949
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    je suis sure d'avoir lu dans la doc de MySQL ou dans le livre 'Mysql Le guide complet' que mysql créé automatiquement un index sur les colone Foreign key....
    Ach....
    InnoDB ne crée pas automatiquement les index nécessaires pour les clés étrangères : vous devez ls créer vous-même.
    Cf: http://dev.mysql.com/doc/refman/5.0/...nstraints.html

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    J'ai trouver le problème. J'avais mit templateID NOT NULL et ON DELETE SET NULL alors il y avait une contradiction. Maintenant tout va bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    CREATE TABLE IF NOT EXISTS `tblUser` (
     
      `userID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
     
      `login` VARCHAR(15) BINARY NOT NULL ,
     
      `pseudo` VARCHAR(15) NOT NULL ,
     
      `email` VARCHAR(45) NOT NULL ,
     
      `password` CHAR(32) NOT NULL ,
     
      `dateInscription` DATE NULL ,
     
      `dateDerVisite` DATE NULL ,
     
      `sexe` ENUM('H','F') NOT NULL ,
     
      `dateNaissance` DATE NULL ,
     
      `nom` VARCHAR(45) NOT NULL ,
     
      `prenom` VARCHAR(45) NOT NULL ,
     
      `compteActif` ENUM('O','N') NULL DEFAULT 'N',
     
      `image` VARCHAR(20) NULL ,
     
      `newsLetters` ENUM('O','N') NULL DEFAULT 'O',
      `templateID` TINYINT UNSIGNED DEFAULT NULL,
     
      UNIQUE INDEX `tblUser_login_u` (`login` ASC) ,
     
      UNIQUE INDEX `tblUser_pseudo_u` (`pseudo` ASC) ,
     
      UNIQUE INDEX `tblUser_email_u` (`email` ASC) ,
     
      PRIMARY KEY (`userID`),
      CONSTRAINT `tblUser_templateID_FK`
        FOREIGN KEY (`templateID` )
        REFERENCES `tlkTemplate` (`templateID` )
        ON DELETE SET NULL
    )ENGINE = InnoDB;

  8. #8
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Citation Envoyé par qi130 Voir le message
    Un petit soucis en perspective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    `templateID` TINYINT UNSIGNED NOT NULL,
      ...
      CONSTRAINT `tblUser_templateID_FK`
        FOREIGN KEY (`templateID` )
        REFERENCES `tlkTemplate` (`templateID` )
        ON DELETE SET NULL
    Ce n'est pas ce que qi130 t'a signalé il y a un bon paquet d'heures ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    Oup, j'Mavait pas remarquer le NOT NULL et le SET NULL en rouge lol
    Merci a tous !!

  10. #10
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Que celle ou celui qui n'a jamais pêché par étourderie te jette la première pierre, donc sûrement pas moi
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Trigger AFTER UPDATE avec une FOREIGN KEY
    Par brruno dans le forum Développement
    Réponses: 6
    Dernier message: 11/02/2015, 11h39
  2. Problème pour setter une Foreign Key avec TopLink(ValueHolderInterface)
    Par Kcintim dans le forum Persistance des données
    Réponses: 1
    Dernier message: 19/06/2011, 12h40
  3. enregistrer en une fois classe avec une foreign key
    Par xander412 dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/08/2010, 12h18
  4. SELECT avec une foreign key null
    Par wwave dans le forum Oracle
    Réponses: 1
    Dernier message: 21/01/2010, 17h37
  5. [debutant]cree une table avec des foreign key
    Par christopheEU dans le forum Développement
    Réponses: 2
    Dernier message: 02/02/2009, 17h16

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