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 25/07/2006, 19h22   #1
Membre habitué
 
Avatar de rieppe
 
Étudiant
Inscription : octobre 2004
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2004
Messages : 115
Points : 124
Points : 124
Envoyer un message via MSN à rieppe
Par défaut Problème de clefs étrangères

Bonjour à vous.

Si je viens jusqu'ici c'est parce que j'ai passé un apres midi à tenter de faire marcher mon code :o

Voici mon code :

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
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
DROP TABLE IF EXISTS Niveau;
CREATE TABLE Niveau (
	idNiveau int(11) NOT NULL AUTO_INCREMENT,
	LibelleNiveau Varchar(20),
	PRIMARY KEY (idNiveau)
) ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Fonction;
CREATE TABLE Fonction (
	idFonction int(11) NOT NULL AUTO_INCREMENT,
	LibelleFonction	Varchar(20),
	PRIMARY KEY (idFonction)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Agence;
CREATE TABLE Agence (
	idAgence int(11) NOT NULL AUTO_INCREMENT,
	LibelleAgence Varchar(20),
	PRIMARY KEY (idAgence)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Processus;
CREATE TABLE Processus (
	idProcessus int(11) NOT NULL AUTO_INCREMENT,
	LibelleProcessus Varchar(20),
	PRIMARY KEY (idProcessus)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS SousProcessus;
CREATE TABLE SousProcessus (
	idSousProcessus int(11) NOT NULL AUTO_INCREMENT,
	LibelleSousProcessus Varchar(20),
	PRIMARY KEY (idSousProcessus)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS ModeContact;
CREATE TABLE ModeContact (
	idModeContact int(11) NOT NULL AUTO_INCREMENT,
	LibelleModeContact Varchar(20),
	PRIMARY KEY (idModeContact)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Domaine;
CREATE TABLE Domaine (
	idDomaine int(11) NOT NULL AUTO_INCREMENT,
	LebelleDomaine Varchar(20),
	PRIMARY KEY (idDomaine)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Utilisateur;
CREATE TABLE Utilisateur (
	idUtilisateur 	int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	Nom Varchar(20),
	Prenom Varchar(20),
	Trigramme Varchar(3),
	Pass Varchar(10),
	Tel Varchar(15),
	telPort Varchar(15),
	Mail Varchar(50),
	Niveau int(11),
	Agence int(11),
	Fonction int(11),
	INDEX(Niveau),
	INDEX(Agence),
	INDEX(Fonction),
	INDEX(Trigramme),
	FOREIGN KEY Niveau REFERENCES Niveau (idNiveau),
	FOREIGN KEY Agence REFERENCES Agence (idAgence),
	FOREIGN KEY Fonction REFERENCES Fonction (idFonction)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS InfosNv1;
CREATE TABLE InfosNv1 (
	idInfosNv1 int(11) NOT NULL AUTO_INCREMENT,
	Solution Text,
	AppelantInforme int,
	DateRappel Date,
	HeureRappel Time,
	OperateurN2Transfert int,
	DateTransfert Date,
	Commentaire Text,
	INDEX(OperateurN2Transfert),
	PRIMARY KEY (idInfosNv1),
	FOREIGN KEY OperateurN2Transfert REFERENCES Utilisateur(idUtilisateur)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS InfosNv2;
CREATE TABLE InfosNv2 (
	idInfosNv2 int(11) NOT NULL AUTO_INCREMENT,
	Solution Text,
	OperateurN3Transfert int,
	DateTransfert Date,
	Commentaire Text,
	INDEX(OperateurN3Transfert),
	PRIMARY KEY (idInfosNv2),
	FOREIGN KEY OperateurN3Transfert REFERENCES Utilisateur(idUtilisateur)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS InfosNv3;
CREATE TABLE InfosNv3 (
	idInfoNv3 int(11) NOT NULL AUTO_INCREMENT,
	Solution Text,
	Commentaire Text,
	PRIMARY KEY (idInfoNv3)
)ENGINE=InnoDB CHARSET=latin1;
 
DROP TABLE IF EXISTS Ticket;
#auto_increment = Valeur Pour commencer la numérotation à partir de valeur x)
CREATE TABLE Ticket (
	idTicket int(11) NOT NULL AUTO_INCREMENT,
	Appelant int,
	OuvertPar int,
	FermePar int,
	DateOuverture Date,
	HeureOuverture Time,
	DateFermeture Date,
	HeureFermeture Time,
	Questiion Text,
	FichierAssocié Varchar(20),
	Processus int,
	SousProcessus int,
	ModeContact int,
	Domaine int,
	InfosNv1 int,
	InfosNv2 int,
	InfosNv3 int,
	INDEX(Processus),
	INDEX(SousProcessus),
	INDEX(ModeContact),
	INDEX(Domaine),
	INDEX(InfosNv1),
	INDEX(InfosNv2),
	INDEX(InfosNv3),						                  
	PRIMARY KEY (idTicket),                     
	FOREIGN KEY Processus REFERENCES Processus REFERENCES Processus(idProcessus	),
	FOREIGN KEY SousProcessus REFERENCES SousProcessus REFERENCES SousProcessus(idSousProcessus),
	FOREIGN KEY ModeContact REFERENCES ModeContact REFERENCES ModeContact(idModeContact),
	FOREIGN KEY Domaine  REFERENCES Domaine REFERENCES Domaine(idDomaine),
	FOREIGN KEY InfosNv1 REFERENCES InfosNv1 REFERENCES InfosNv1(idInfosNv1),
	FOREIGN KEY InfosNv2 REFERENCES InfosNv2 REFERENCES InfosNv2(idInfosNv2),
	FOREIGN KEY InfosNv3 REFERENCES InfosNv3 REFERENCES InfosNv3(idInfosNv3),
)ENGINE=InnoDB CHARSET=latin1;
Je travail sous Apache 2.0.40 / MySQL 4.1.16

L'erreur renvoyée est "ERROR 1064 (42000)"

Je ne comprend pas pourquoi ca ne veut pas s'éxecuter

J'ai inclut mon code en piece jointe Ca peut être utile

Cordialement,

Rieppe
Fichiers attachés
Type de fichier : sql LDD.sql (4,4 Ko, 0 affichages)
rieppe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 19h29   #2
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Salut !

Je n'ai pas testé ton script, mais tu as une erreur dans ces lignes :

Code :
1
2
3
4
5
6
7
	FOREIGN KEY Processus REFERENCES Processus REFERENCES Processus(idProcessus	),
	FOREIGN KEY SousProcessus REFERENCES SousProcessus REFERENCES SousProcessus(idSousProcessus),
	FOREIGN KEY ModeContact REFERENCES ModeContact REFERENCES ModeContact(idModeContact),
	FOREIGN KEY Domaine  REFERENCES Domaine REFERENCES Domaine(idDomaine),
	FOREIGN KEY InfosNv1 REFERENCES InfosNv1 REFERENCES InfosNv1(idInfosNv1),
	FOREIGN KEY InfosNv2 REFERENCES InfosNv2 REFERENCES InfosNv2(idInfosNv2),
	FOREIGN KEY InfosNv3 REFERENCES InfosNv3 REFERENCES InfosNv3(idInfosNv3),
Tous les References sont en double, premièrement, puis, il y a une virgule à la fin de la dernière ligne qui va également poser problème. Corrige déjà ça, ça devrait aller mieux après
__________________
La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
-----------------------------------------------------------
Retrouvez mes articles informatique sur mon Site Developpez.
Le reste, sur le Site perso !

DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 19h33   #3
Membre habitué
 
Avatar de rieppe
 
Étudiant
Inscription : octobre 2004
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2004
Messages : 115
Points : 124
Points : 124
Envoyer un message via MSN à rieppe
Oula les références en double n'y étaient pas :o

Par contre la virgule peut être :/

Je vais tester. Si c'est ca j'aurais dérangé pour rien et je m'en veux ^^
rieppe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 19h37   #4
Membre habitué
 
Avatar de rieppe
 
Étudiant
Inscription : octobre 2004
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2004
Messages : 115
Points : 124
Points : 124
Envoyer un message via MSN à rieppe
Oui comme je pensais, ça ne fonctionne toujorus pas.

J'ai une erreur qui se situe avant les lignes qui faisaient défaut, au niveau de la table utilisateur. celle-là même qui utilise en premier les clefs étrangères.

PS: j'ai changé le fichier SQL que j'avais mis en attachement avec la correction d'erreurs apportée
rieppe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 22h51   #5
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Eh eh, en fait c'est parce que tu n'as pas bien lu le manuel

Code :
1
2
3
FOREIGN KEY (Niveau) REFERENCES Niveau( idNiveau ) ,
FOREIGN KEY (Agence) REFERENCES Agence( idAgence ) ,
FOREIGN KEY (Fonction) REFERENCES Fonction( idFonction )
L'erreur était les parenthèses sur les champs concernés par les clés étrangères.
__________________
La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
-----------------------------------------------------------
Retrouvez mes articles informatique sur mon Site Developpez.
Le reste, sur le Site perso !

DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 08h16   #6
Membre habitué
 
Avatar de rieppe
 
Étudiant
Inscription : octobre 2004
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2004
Messages : 115
Points : 124
Points : 124
Envoyer un message via MSN à rieppe
Effectivement j'ai fais une erreur noobesque :/

Merci en tout cas ^^'

Il me reste juste une erreur 150

Code :
ERROR 1005 (HY000): Can't create table './beezdev/Ticket.frm' (errno: 150)
Il me semble que c'est une erreur liée aux clefs étrangères je me met de suite dessus

EDIT : Je remet à jour le script que j'ai mis en attachement
rieppe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 09h32   #7
Membre habitué
 
Avatar de rieppe
 
Étudiant
Inscription : octobre 2004
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2004
Messages : 115
Points : 124
Points : 124
Envoyer un message via MSN à rieppe
Ok j'ai réglé le problème.

J'avais mis pour les types entier des int(11) qui, apparament, n'étaient pas appréciés par MySQL ^^'

Je remet a jour mon script en attachement pour ceux à qui cela pourrait servir.

Merci beaucoup de votre aide chaleureuse
rieppe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 09h36   #8
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
EDIT : j'étais un peu en retard finalement Merci pour la réponse !

Ben écoute là j'ai cherché un peu, et la suptilité m'échappe. Je n'ai pas le temps de trop regarder, mais normalement cette erreur apparait lorsque :
  • La table référencée n'est pas de type InnoDB
  • La colonne référencée dans l'autre table n'est pas unique
  • La colonne référencée dans l'autre table n'a pas le même type
Et ici ce n'est pas le cas dans ce que j'ai regardé, étrange ! Précise quand même une taille sur tes champs, tu mets int, même sir par défaut c'est 11, je pense que c'est mieux de le mettre (mais ça ne résout pas le problème j'ai essayé).

Tiens moi au courant quand tu auras trouvé !
__________________
La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
-----------------------------------------------------------
Retrouvez mes articles informatique sur mon Site Developpez.
Le reste, sur le Site perso !

DBProg 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 11h56.


 
 
 
 
Partenaires

Hébergement Web