Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2005, 11h16   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 93
Points : 33
Points : 33
Par défaut Clé etrangere erreur 150 mais je vois pas l'erreur

bonjour,
j'ai une une erreur 150 sur la création d'une table, d'apres la FAQ mysql ça buggue au niveau des clés etrangeres de ma 3eme table mais je vois pas mon erreur, donc un petit coup d'oeuil externe serait le bien venu


Code :
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
DROP TABLE IF EXISTS `doc_qualite`;
CREATE TABLE `doc_qualite` (
`Ndq` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`Nchro` INT( 10 ) UNSIGNED NOT NULL ,
`nom` VARCHAR( 50 ) NOT NULL ,
`indice` INT( 3 ) DEFAULT '1' NOT NULL ,
`type` ENUM( 'T' ) NOT NULL ,
`date` DATE DEFAULT '''1000-01-01''' NOT NULL ,
`provenance` ENUM( 'Airbus' ) NOT NULL ,
PRIMARY KEY ( `Ndq` )
) TYPE = InnoDB DEFAULT CHARSET=utf8;
 
 
 
DROP TABLE IF EXISTS `service`;
CREATE TABLE `service` (
`Nserv` INT( 10 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `Nserv` )
) TYPE = InnoDB DEFAULT CHARSET=utf8;
 
 
 
DROP TABLE IF EXISTS `Dq_serv`;
CREATE TABLE `Dq_serv` (
`Ndq` INT( 10 ) NOT NULL ,
`Nserv` INT( 10 ) NOT NULL ,
`criticite` ENUM( '1', '2', '3' ) DEFAULT '1' NOT NULL ,
`action` TEXT NOT NULL ,
PRIMARY KEY ( `Ndq` , `Nserv` ),
INDEX `indx_Ndq_dq_serv` (`Ndq`) ,
FOREIGN KEY `fk_Ndq_doc_qualite_dq_serv` (`Ndq`) REFERENCES `doc_qualite` (`Ndq`) ON DELETE CASCADE,
INDEX `indx_Nserv_dq_serv` (`Nserv`) ,
FOREIGN KEY `fk_Nserv_serv_dq_serv` (`Nserv`) REFERENCES `service` (`Nserv`) ON DELETE CASCADE
 
) TYPE = InnoDB DEFAULT CHARSET=utf8;

merci
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 15h50   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
SHOW INNODB STATUS now prints detailed information of the latest detected FOREIGN KEY and UNIQUE KEY errors. If you do not understand why InnoDB gives the error 150 from a CREATE TABLE, you can use this statement to study the reason.
Peux-tu essayer cette commande et poster le résultat ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 16h05   #3
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
il y a aussi tous ces points à vérifier et prendre en compte :

Citation:
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.
En rouge les éléments à respecter...
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 16h57   #4
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 93
Points : 33
Points : 33
je vous remercie tous les deux, j'avais oublié de préciser que je travaillait avec des entiers non signés dans la table ou il y a mes clé etrangères, j'ai pu le voir grace au INNODB STATUS



merci [/list][/code]
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h20.


 
 
 
 
Partenaires

Hébergement Web