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

MySQL Discussion :

Rapport d'erreur : Erreur SQL : Cannot add foreign key constraint


Sujet :

MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Rapport d'erreur : Erreur SQL : Cannot add foreign key constraint
    Bonjour,

    j'utilise MYSQL sous SQL DEVELOPER et j'essaye de creer la table suivante

    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
     
    CREATE  TABLE IF NOT EXISTS `MEMBRE` (
      `id_membre` INT NOT NULL AUTO_INCREMENT ,
      `login` VARCHAR(45) NOT NULL UNIQUE,
      `password` VARCHAR(80) NOT NULL ,
      `nom` VARCHAR(45) NOT NULL ,
      `prenom` VARCHAR(45) NOT NULL ,
      `adresse` VARCHAR(80) NULL ,
      `id_ville` mediumint(8) unsigned NULL ,
      `code_postal` VARCHAR(20) NULL ,
      `id_pays` smallint(5) unsigned NULL ,
      `email` VARCHAR(45) NULL ,
      `telephone` VARCHAR(20),
      `date_enregistrement` DATE NOT NULL,
      `date_credential` DATE NOT NULL,
      `enable` TINYINT(1) NOT NULL DEFAULT 1,
      `locked` TINYINT(1) NOT NULL DEFAULT 0,
      `raison_locked` VARCHAR(45) NULL,
      `nombre_mauvaise_reponse` TINYINT(1) NOT NULL DEFAULT 0,
      `question` VARCHAR(45) NULL,
      `reponse` VARCHAR(45) NULL,
      `date_mauvaise_reponse` DATE NULL,
      `date_derniere_connexion` DATE NULL,
      PRIMARY KEY (`id_membre`),
      CONSTRAINT `fk_membre_pays`
        FOREIGN KEY (`id_pays` )
        REFERENCES `pays` (`id` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_membre_ville`
        FOREIGN KEY (`id_ville` )
        REFERENCES `ville` (`id_ville` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;
    et je recois l'erreur suivante

    Rapport d'erreur :
    Erreur SQL : Cannot add foreign key constraint

    d'après un post on pourrait avoir plus d'information avec SHOW ENGINE INNODB STATUS;, mais cela ne me donne rien

    J'ai navigué sur les forum et j'ai suivi toutes les recommendation mais sans succès. Merci d'avance si vous aviez une idée

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Flamand.

    Pour ajouter une nouvelle ligne dans la table "membre", il faut au préalable que les tables "pays" et "ville" existent déjà.

    La clef étrangère (Foreign key) de la table fils ne fonctionne que si cette clef existe déjà dans la table père.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Artemus24,

    les tables pays et ville existe déjà et j'ai le même type de données entre les identifiant des tables pays et ville et les clés étrangères

    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
     
    CREATE TABLE IF NOT EXISTS `VILLE` (
      `ville_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `ville_departement` varchar(3) DEFAULT NULL,
      `ville_slug` varchar(255) DEFAULT NULL,
      `ville_nom` varchar(45) DEFAULT NULL,
      `ville_nom_simple` varchar(45) DEFAULT NULL,
      `ville_nom_reel` varchar(45) DEFAULT NULL,
      `ville_nom_soundex` varchar(20) DEFAULT NULL,
      `ville_nom_metaphone` varchar(22) DEFAULT NULL,
      `ville_code_postal` varchar(255) DEFAULT NULL,
      `ville_commune` varchar(3) DEFAULT NULL,
      `ville_code_commune` varchar(5) NOT NULL,
      `ville_arrondissement` smallint(3) unsigned DEFAULT NULL,
      `ville_canton` varchar(4) DEFAULT NULL,
      `ville_amdi` smallint(5) unsigned DEFAULT NULL,
      `ville_population_2010` mediumint(11) unsigned DEFAULT NULL,
      `ville_population_1999` mediumint(11) unsigned DEFAULT NULL,
      `ville_population_2012` mediumint(10) unsigned DEFAULT NULL COMMENT 'approximatif',
      `ville_densite_2010` int(11) DEFAULT NULL,
      `ville_surface` float DEFAULT NULL,
      `ville_longitude_deg` float DEFAULT NULL,
      `ville_latitude_deg` float DEFAULT NULL,
      `ville_longitude_grd` varchar(9) DEFAULT NULL,
      `ville_latitude_grd` varchar(8) DEFAULT NULL,
      `ville_longitude_dms` varchar(9) DEFAULT NULL,
      `ville_latitude_dms` varchar(8) DEFAULT NULL,
      `ville_zmin` mediumint(4) DEFAULT NULL,
      `ville_zmax` mediumint(4) DEFAULT NULL,
      PRIMARY KEY (`ville_id`),
      UNIQUE KEY `ville_code_commune_2` (`ville_code_commune`),
      UNIQUE KEY `ville_slug` (`ville_slug`),
      KEY `ville_departement` (`ville_departement`),
      KEY `ville_nom` (`ville_nom`),
      KEY `ville_nom_reel` (`ville_nom_reel`),
      KEY `ville_code_commune` (`ville_code_commune`),
      KEY `ville_code_postal` (`ville_code_postal`),
      KEY `ville_longitude_latitude_deg` (`ville_longitude_deg`,`ville_latitude_deg`),
      KEY `ville_nom_soundex` (`ville_nom_soundex`),
      KEY `ville_nom_metaphone` (`ville_nom_metaphone`),
      KEY `ville_population_2010` (`ville_population_2010`),
      KEY `ville_nom_simple` (`ville_nom_simple`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=36831 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE IF NOT EXISTS `pays` (
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `code` int(3) NOT NULL,
      `alpha2` varchar(2) NOT NULL,
      `alpha3` varchar(3) NOT NULL,
      `nom_en_gb` varchar(45) NOT NULL,
      `nom_fr_fr` varchar(45) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `alpha2` (`alpha2`),
      UNIQUE KEY `alpha3` (`alpha3`),
      UNIQUE KEY `code_unique` (`code`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=242 ;

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Re-bonjour Artemis24,

    c'est une erreur stupide de ma part. La cle primaire de la table ville est 'ville_id' et non 'id_ville'

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Flamand.

    En effet, je viens de faire le test, et je me suis aperçu (un peu tard) que tu n'avais pas le même nom pour ta colonne :
    --> table 'ville' : ville_id
    --> table 'membre' : id_ville

    C'est pas bien grave comme erreur. Je te conseille de toujours préfixer les noms de tes colonnes par un code désignant le nom de ta table.
    --> 'pay' pour pays.
    --> 'mem' pour membre.
    --> 'vil' pour ville.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2013, 17h20
  2. Réponses: 2
    Dernier message: 11/07/2012, 17h52
  3. Réponses: 0
    Dernier message: 12/12/2007, 21h10
  4. Erreur: conflit avec la contrainte FOREIGN KEY SAME TABLE
    Par useretl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/10/2007, 12h27
  5. Message d'erreur 'violation of FOREIGN KEY constraint' de Interbase
    Par abdelghani_k dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/06/2007, 09h11

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