{MySQL} Pb lors de la création d'une table MySQL
Résolu
kanbur
-
kanbur -
kanbur -
Bonjour,
Je n'arrive pas à comprendre pourquoi mysql m'envoie ce message d'erreur lors de la création de la table BATIMENT :
"ERROR 1072 (42000): Key column 'CATEGORY_ID' doesn't exist in table"
Voici mon code MySQL de création des deux tables :
create table CATEGORY
(
CATEGORY_ID integer not null auto_increment,
Category_Name varchar(100) binary not null,
Category_Description varchar(250) binary,
primary key (CATEGORY_ID),
unique (CATEGORY_ID,Category_Name)
) ENGINE = InnoDB;
create table BATIMENT
(
BATIMENT_ID integer not null auto_increment,
Batiment_Name varchar(100) binary not null,
Batiment_Description varchar(200) binary,
primary key (BATIMENT_ID),
unique (BATIMENT_ID,Batiment_Name),
INDEX (CATEGORY_ID),
FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORY (CATEGORY_ID) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;
**************************************************
Pourtant la création de la table CATEGORY s'effectue correctement. L'appercu des champs de cette table est correct :
mysql> SHOW COLUMNS FROM CATEGORY ;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| CATEGORY_ID | int(11) | NO | PRI | NULL | auto_increment |
| Category_Name | varchar(100) | NO | | | |
| Category_Description | varchar(250) | YES | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
Je n'arrive pas à comprendre pourquoi mysql m'envoie ce message d'erreur lors de la création de la table BATIMENT :
"ERROR 1072 (42000): Key column 'CATEGORY_ID' doesn't exist in table"
Voici mon code MySQL de création des deux tables :
create table CATEGORY
(
CATEGORY_ID integer not null auto_increment,
Category_Name varchar(100) binary not null,
Category_Description varchar(250) binary,
primary key (CATEGORY_ID),
unique (CATEGORY_ID,Category_Name)
) ENGINE = InnoDB;
create table BATIMENT
(
BATIMENT_ID integer not null auto_increment,
Batiment_Name varchar(100) binary not null,
Batiment_Description varchar(200) binary,
primary key (BATIMENT_ID),
unique (BATIMENT_ID,Batiment_Name),
INDEX (CATEGORY_ID),
FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORY (CATEGORY_ID) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;
**************************************************
Pourtant la création de la table CATEGORY s'effectue correctement. L'appercu des champs de cette table est correct :
mysql> SHOW COLUMNS FROM CATEGORY ;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| CATEGORY_ID | int(11) | NO | PRI | NULL | auto_increment |
| Category_Name | varchar(100) | NO | | | |
| Category_Description | varchar(250) | YES | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
A voir également:
- {MySQL} Pb lors de la création d'une table MySQL
- Table ascii - Guide
- Table des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- Creation de site web - Guide
- Creation de compte google - Guide
6 réponses
Bonjour,
je commence par les remarques :
-il est inutile de signaler au niveau de la table CATEGORY que CATEGORY_ID est unique étant donné que c'est une clé primaire.
-même remarque que précedemment pour la table BATIMENT et la clé primaire BATIMENT_ID
-même remarque pour la contrainte not null qui est implicite dans le cas des clé primaires.
-je n'ai pas compris le but de l'utilisation de index(CATEGORY_ID) ???
Pour le problème il est du à la non déclaration du champs CATEGORY_ID dans la table BATIMENT .
Essaye ça :
je commence par les remarques :
-il est inutile de signaler au niveau de la table CATEGORY que CATEGORY_ID est unique étant donné que c'est une clé primaire.
-même remarque que précedemment pour la table BATIMENT et la clé primaire BATIMENT_ID
-même remarque pour la contrainte not null qui est implicite dans le cas des clé primaires.
-je n'ai pas compris le but de l'utilisation de index(CATEGORY_ID) ???
Pour le problème il est du à la non déclaration du champs CATEGORY_ID dans la table BATIMENT .
Essaye ça :
create table BATIMENT ( BATIMENT_ID integer auto_increment, Batiment_Name varchar(100) binary not null unique, Batiment_Description varchar(200) binary, CATEGORY_ID integer, Constraint pk_batiment primary key (BATIMENT_ID), FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORY (CATEGORY_ID) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB;
Dans la table "BATIMENT", en ajoutant la ligne "CATEGORY_ID integer not null," avant "INDEX (CATEGORY_ID)" je n'obtiens plus d'erreur.
Merci bcp wjaouadi. Précédemment, j'étais en train de m'apporter une réponse au même moment que toi.
Tes précisions sur mes lignes inutiles vont bien m'aider pour mieux coder.
Concernant le but de l'utilisation de index(CATEGORY_ID), en fait j'ai lu que l'ajout d'INDEX est pertinent sur :
- les champs utilisés pour les clés étrangères (ON ... = ...)
- les champs sur lesquels des tris sont très souvent utilisés (ORDER BY ...)
- les champs sur lesquels des filtres sont très souvent utilisés (WHERE ...)
alors je me suis dis que quand on déclare une clé étrangère, il vaut mieux créer un index pour accélérer les requêtes de lecture de la table mais je dois me tromper. Est-ce que je peux avoir ton avis dessus ?
Tes précisions sur mes lignes inutiles vont bien m'aider pour mieux coder.
Concernant le but de l'utilisation de index(CATEGORY_ID), en fait j'ai lu que l'ajout d'INDEX est pertinent sur :
- les champs utilisés pour les clés étrangères (ON ... = ...)
- les champs sur lesquels des tris sont très souvent utilisés (ORDER BY ...)
- les champs sur lesquels des filtres sont très souvent utilisés (WHERE ...)
alors je me suis dis que quand on déclare une clé étrangère, il vaut mieux créer un index pour accélérer les requêtes de lecture de la table mais je dois me tromper. Est-ce que je peux avoir ton avis dessus ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question