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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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
    Membre éclairé
    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
    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
    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
    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
    Par défaut
    C'est apparemment un sujet qui revient souvent sur le net :

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

  6. #6
    Membre éclairé
    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
    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

+ 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