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 :

[Mysql5] Erreur pour poser une clé étrangère [Fait]


Sujet :

Outils MySQL

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    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 : 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
    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.

  2. #2
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    c'est une clé déjà existante, moi je veux en rajouter une autre avec un ALTER TABLE. J'utilise mysql administrator pour ca.

  4. #4
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Tout simplement, imaginons que je créé une table Item2 comme suite :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    C'est apparemment un sujet qui revient souvent sur le net :

    http://bugs.mysql.com/bug.php?id=3491

  6. #6
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    voila un exemple de table avec 2 clé etrangere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    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.

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  9. #9
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    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)

  10. #10
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Effectivement, en changeant les types (j'y avais pas fait attention), ca marche correctement.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/04/2007, 09h03
  2. message d'erreur pour supprimer une table
    Par marco361020 dans le forum Access
    Réponses: 4
    Dernier message: 22/11/2006, 17h22
  3. Problème pour créer une clé étrangère
    Par DevloNewb' dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/07/2006, 16h30
  4. [VBA-E] Erreur pour copier une feuille
    Par Persons dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/06/2006, 22h38
  5. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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