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 :

Erreur a la creation table - Foreign keys #1005 - (Errcode: 150)


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut Erreur a la creation table - Foreign keys #1005 - (Errcode: 150)
    Bonjour a tous.
    Lors du lancement d'un script sql sous PHPMyadmin j'obtiens une erreur lors de la creation de la derniere table `users`.
    Celle ci contient des Foreign Keys envers une table `paises` (pays).
    L'erreur obtenu est
    "#1005 - Ne peut créer la table 'com.users' (Errcode: 150) "
    J'ai controle le code, a priori pas de fautes de frappe.
    Voici le script
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    -- SQL Script
    -- ----------------------------------------------------------------------
    SET FOREIGN_KEY_CHECKS = 0;
    -- -------------------------------------
    -- Tables
     
    DROP TABLE IF EXISTS `categorias`;
    CREATE TABLE `categorias` (
      `cat_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `cat_nome` VARCHAR(32)  NOT NULL,
      PRIMARY KEY (`cat_id`)
    )
    ENGINE = InnoDB
    CHARACTER SET latin1 COLLATE latin1_swedish_ci;
     
    DROP TABLE IF EXISTS `artigos`;
    CREATE TABLE `artigos` (
      `art_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `art_nome` VARCHAR(32) NOT NULL,
      `art_desc` VARCHAR(80) NOT NULL,
      `cat_id` INT(11) UNSIGNED NOT NULL,
      PRIMARY KEY (`art_id`),
      CONSTRAINT `FKcategorias` FOREIGN KEY `FKcategorias` (`cat_id`)
        REFERENCES `categorias` (`cat_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
    )
    ENGINE = InnoDB
    CHARACTER SET latin1 COLLATE latin1_swedish_ci;
     
    DROP TABLE IF EXISTS `Imagens`;
    CREATE TABLE `Imagens` (
    	`imagem_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    	`imagem_nome` VARCHAR(32) NOT NULL,
    	`imagem_data` DATETIME NOT NULL,
    	`art_id` INT(11) UNSIGNED NOT NULL,
    	PRIMARY KEY (`imagem_id`),
    CONSTRAINT `FKartigos` FOREIGN KEY `FKartigos` (`art_id`)
        REFERENCES `artigos` (`art_id`)
        ON DELETE NO ACTION
        ON UPDATE CASCADE
    )
    ENGINE = InnoDB
    CHARACTER SET latin1 COLLATE latin1_swedish_ci;
     
     
    DROP TABLES IF EXISTS `Paises`;
    CREATE TABLE Paises (
    	`id_pais` INT(11) NOT NULL,
    	`nome` varchar(50) NOT NULL
    ) 
    ENGINE = InnoDB
    CHARACTER SET latin1;
     
    DROP TABLES IF EXISTS `Users`;
    CREATE TABLE `Users` (
    	`user_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    	`first_name` VARCHAR(20) NOT NULL,
    	`last_name` VARCHAR(40) NOT NULL,
    	`phone` VARCHAR(30) NOT NULL,
    	`email` VARCHAR(60) NOT NULL,
    	`pais` VARCHAR(50) NOT NULL,
    	`registo` DATETIME NOT NULL,
    	`id_pais` INT(11) UNSIGNED NOT NULL,
    	PRIMARY KEY (`user_id`),
    CONSTRAINT `FKpaises` FOREIGN KEY `FKpaises` (`id_pais`)
    	REFERENCES `Paises` (`id_pais`)
    	ON DELETE NO ACTION
    	ON UPDATE CASCADE
    )
    ENGINE = InnoDB
    CHARACTER SET latin1 COLLATE latin1_swedish_ci;
     
     
    SET FOREIGN_KEY_CHECKS = 1;
    autrement les autres tables sont correctement crees. J'ai essaye aussi sans les FK envers la table "paises" la bien sur ca marche. Mais plus de FK
    Une ame charitable pourrais jeter un coup d'oeil sur mon code et m'aiguiller?
    Merci de vos conseils.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    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 932
    Par défaut
    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. Les index sont nécessaires pour accélérer les vérifications de contrainte, et éviter un scan de table.

    Les colonnes correspondantes de la contrainte dans la table et la table de référence doivent avoir le même type, pour éviter les conversions lors des comparaisons. La taille et la présente du signe pour les entiers doit être les mêmes.
    Source : http://dev.mysql.com/doc/refman/5.0/...nstraints.html

    Voilà, tout est dit !

Discussions similaires

  1. [phpMyAdmin] Erreur d'ajout d'un foreign key
    Par a-sana dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/12/2012, 17h28
  2. Erreur Create table/foreign Key
    Par vashe9 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/09/2011, 15h29
  3. [SQL-Server] insert into d'une table reliant deux tables(foreign key)
    Par evra76 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/07/2009, 10h38
  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. pb oracle création table - foreign key
    Par dédéf dans le forum Oracle
    Réponses: 3
    Dernier message: 29/11/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