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

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 20:09

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 20:20

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
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 20:25

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 20:29

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));
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 20:31

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 20:37

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...
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 20:42

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 20:48

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;
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 20:53

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 20:54

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 .
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 21:07

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

26 nov. 2006, 21:15

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
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

26 nov. 2006, 21:40

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.