Page 1 sur 1

#1005 - Can't create table '.\immo\annonce.frm' (errno: 150)

Posté : 26 nov. 2006, 20:09
par dunbar
Bonjour,

Quand je veux créer mes tables j'ai comme erreur ceci :
#1005 - Can't create table '.\immo\annonce.frm' (errno: 150)
Et le problème est que je ne comprend pas pourquoi ?
Mes TABLES
CREATE TABLE DIRECTORY (
id_directory INT NOT NULL AUTO_INCREMENT,
name VARCHAR(75) NOT NULL,
CONSTRAINT directory_id_directory PRIMARY KEY (id_directory));

CREATE TABLE FILE (
id_file INT NOT NULL AUTO_INCREMENT,
id_directory NUMERIC(16) NOT NULL,
name VARCHAR(75) NOT NULL,
CONSTRAINT file_id_file PRIMARY KEY (id_file),
CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references DIRECTORY(id_directory));

CREATE TABLE ANNONCE (
id_annonce INT NOT NULL AUTO_INCREMENT,
id_directory NUMERIC(16) NOT NULL,
type VARCHAR(30) NOT NULL,
prix DECIMAL(10,2) NOT NULL,
codepostal DECIMAL(5,0) NOT NULL,
nb_chambre DECIMAL(2) NOT NULL,
nb_garage DECIMAL(2) NOT NULL,
nb_file DECIMAL(1) NOT NULL,
CONSTRAINT annonce_id_annonce PRIMARY KEY (id_annonce),
CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references DIRECTORY(id_directory));
D'avance merci

Posté : 26 nov. 2006, 20:20
par Ajoloca
Bonsoir,
Je ne suis pas sur, mais je serais tenté de dire que tu utilises des mots réservés MySQL comme nom de table.
Si tu veux absolument garder ces noms tu doits les protéger comme ceci

Code : Tout sélectionner

CREATE TABLE `DIRECTORY` ( .... CREATE TABLE `FILE` ( ....
Le caractère qui entoure le nom de la table n'est pas une apostrophe mais un accent grâve que tu obtiens dans un clavier français par la combinaison des touches Alt Gr + 7

Posté : 26 nov. 2006, 20:25
par dunbar
Bonsoir,
Je ne suis pas sur, mais je serais tenté de dire que tu utilises des mots réservés MySQL comme nom de table.
Si tu veux absolument garder ces noms tu doits les protéger comme ceci

Code : Tout sélectionner

CREATE TABLE `DIRECTORY` ( .... CREATE TABLE `FILE` ( ....
Le caractère qui entoure le nom de la table n'est pas une apostrophe mais un accent grâve que tu obtiens dans un clavier français par la combinaison des touches Alt Gr + 7
Merci pour cette réponse rapide mais c'est pas ça j'ai toujours la même erreur

Merci

Posté : 26 nov. 2006, 20:29
par Ajoloca
Re,
As-tu protégé ces nom partout ou ils apparaissent ?

Code : Tout sélectionner

-- Table `FILE` CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references `DIRECTORY`(id_directory)); -- Table `ANNONCE` CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references `DIRECTORY`(id_directory));

Posté : 26 nov. 2006, 20:31
par dunbar
Re,
As-tu protégé ces nom partout ou ils apparaissent ?

Code : Tout sélectionner

-- Table `FILE` CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references `DIRECTORY`(id_directory)); -- Table `ANNONCE` CONSTRAINT file_id_directory FOREIGN KEY (id_directory) references `DIRECTORY`(id_directory));
Oui mais cela ne change rien

Posté : 26 nov. 2006, 20:37
par Ajoloca
Re,

Je ne trouve le code erreur 1005 dans la documentation.
Attends que QQ d'autre t'oriente mieux que moi.

EDIT :
Eventuellement tente de les créer une à une et isole celle qui pose problème.
Protège tous les noms de table, colonne, index, etc...

Posté : 26 nov. 2006, 20:42
par dunbar
Re,

Je ne trouve le code erreur 1005 dans la documentation.
Attends que QQ d'autre t'oriente mieux que moi.

EDIT :
Eventuellement tente de les créer une à une et isole celle qui pose problème.
Protège tous les noms de table, colonne, index, etc...
Salut,

Je cherche aussi dans la doc mais je ne trouve rien encore. :wink:

Posté : 26 nov. 2006, 20:48
par Ajoloca
Re,

Une autre idée.

Ajoute à la fin de l'instruction de création de chaque table ENGINE=InnoDB comme ceci

Code : Tout sélectionner

CREATE TABLE DIRECTORY ( id_directory INT NOT NULL AUTO_INCREMENT, name VARCHAR(75) NOT NULL, CONSTRAINT directory_id_directory PRIMARY KEY (id_directory))ENGINE=InnoDB;

Posté : 26 nov. 2006, 20:53
par Ajoloca
Re,
je crois que c'est bon.

Tu déclares des clés étragères mais sur des champs de type different.
id_directory INT NOT NULL AUTO_INCREMENT, pour la table IRECTORY`
et
id_directory NUMERIC(16) NOT NULL, dans les deux autres
C'est ça le PB.

Posté : 26 nov. 2006, 20:54
par dunbar
Re,

Une autre idée.

Ajoute à la fin de l'instruction de création de chaque table ENGINE=InnoDB comme ceci

Code : Tout sélectionner

CREATE TABLE DIRECTORY ( id_directory INT NOT NULL AUTO_INCREMENT, name VARCHAR(75) NOT NULL, CONSTRAINT directory_id_directory PRIMARY KEY (id_directory))ENGINE=InnoDB;
Bon alors ok je vais plu loin et j'ai une autreerreur dans la dernier TABLE.
requête SQL:

CREATE TABLE ANNONCE(

id_annonce INT NOT NULL AUTO_INCREMENT ,
id_directory INT( 16 ) NOT NULL ,
TYPE VARCHAR( 30 ) NOT NULL ,
prix DECIMAL( 10, 2 ) NOT NULL ,
codepostal DECIMAL( 5, 0 ) NOT NULL ,
nb_chambre DECIMAL( 2 ) NOT NULL ,
nb_garage DECIMAL( 2 ) NOT NULL ,
nb_file DECIMAL( 1 ) NOT NULL ,
CONSTRAINT annonce_id_annonce PRIMARY KEY ( id_annonce ) ,
CONSTRAINT file_id_directory FOREIGN KEY ( id_directory ) REFERENCES DIRECTORY( id_directory )
) ENGINE = InnoDB;



MySQL a répondu:

#1005 - Can't create table '.\immo\annonce.frm' (errno: 121)
:twisted: Franchement je ne voie pas .

Posté : 26 nov. 2006, 21:07
par dunbar
Re,
je crois que c'est bon.

Tu déclares des clés étragères mais sur des champs de type different.
id_directory INT NOT NULL AUTO_INCREMENT, pour la table IRECTORY`
et
id_directory NUMERIC(16) NOT NULL, dans les deux autres
C'est ça le PB.
Oui effectivement il me crée les deux première table mais bloque sur la 3 je ne voie pas pourquoi ?
Erreur
requête SQL:

CREATE TABLE ANNONCE(

id_annonce INT NOT NULL AUTO_INCREMENT ,
id_directory INT( 16 ) NOT NULL ,
TYPE VARCHAR( 30 ) NOT NULL ,
prix DECIMAL( 10, 2 ) NOT NULL ,
codepostal NUMERIC( 5 ) NOT NULL ,
nb_chambre NUMERIC( 2 ) NOT NULL ,
nb_garage NUMERIC( 2 ) NOT NULL ,
nb_file INT( 1 ) NOT NULL ,
CONSTRAINT annonce_id_annonce PRIMARY KEY ( id_annonce ) ,
CONSTRAINT file_id_directory FOREIGN KEY ( id_directory ) REFERENCES DIRECTORY( id_directory )
);



MySQL a répondu:

#1005 - Can't create table '.\immo\annonce.frm' (errno: 121)
Merci d'avance :wink:

Posté : 26 nov. 2006, 21:15
par Ajoloca
Re,
Ce coup-ci c'est plus facile :lol:
Le nom d'une clé étrangère c'est comme le nom d'une table il doit être unique dans la base

Posté : 26 nov. 2006, 21:40
par dunbar
Re,
Ce coup-ci c'est plus facile :lol:
Le nom d'une clé étrangère c'est comme le nom d'une table il doit être unique dans la base
Oui effectivement merci ppur ton aide
:wink: