Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec 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 16/11/2010, 23h32   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Par défaut Problème de Clès étrangère

Bonjour à tous,

Voila j'ai l'habitude de travailler sous oracle ou sql server, seulement la je dois faire un projet avec mysql.

Mon problème est que :

J'aii une table profil et une table connexion.
Je voudrais qu'on puisse enregistrer dans la table connexion que si le pseudo existe dans la table profil.

Mais j'ai beau mettre des clès cela ne change en rien, on peut enregistrer n'importe quoi dans la table connexion....

Quelqu'un pourrait m'expliquer?

Merci
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 23h55   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Donne la structure des tables, ce sera plus facile de répondre.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h15   #3
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Voici la table connexion :

Code :
1
2
3
4
5
6
7
8
CREATE TABLE CONNEXION
(
    PSEUDO                CHAR(50)              NOT NULL,
    MDP                   CHAR(50)              NOT NULL,
    EMAIL                 CHAR(250)             NOT NULL,
    ENLIGNE               DECIMAL(1)            NOT NULL,
    PRIMARY KEY (PSEUDO) 
);
Et la table PROFIL :

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
CREATE TABLE PROFIL
(
    IDPROFIL              INTEGER               NOT NULL,
    PSEUDO                CHAR(50)              NOT NULL,
    IDPERSO               INTEGER                       ,
    IDLOCA                INTEGER               NOT NULL,
    IDPRESENTATION        INTEGER                       ,
    IDDITEPLUS            INTEGER                       ,
    SEXE                  CHAR(6)               NOT NULL,
    DATENAISSANCE         DATE                  NOT NULL,
    LANGUEPARLER          CHAR(100)                      ,
    TAILLE                INTEGER                       ,
    CHEVEUX               CHAR(50)                      ,
    NIVETUDE              CHAR(50)                      ,
    CATPROF               CHAR(50)                      ,
    STATMARITAL           CHAR(50)                      ,
    ETHNIC                CHAR(50)                      ,
    YEUX                  CHAR(50)                      ,
    PROFESSION            CHAR(50)                      ,
    LONGUEURCHEVEUX       CHAR(50)                      ,
    SIGNEPART             CHAR(50)                      ,
    ATTRAY                CHAR(50)                      ,
    PILOSITE              CHAR(50)                      ,
    SILHOUETTE            CHAR(50)                      ,
    PRIMARY KEY (IDPROFIL) 
);

Les clès :

Code :
1
2
3
4
5
6
7
ALTER TABLE CONNEXION
    ADD constraint FOREIGN KEY (PSEUDO)
       REFERENCES PROFIL (PSEUDO);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (PSEUDO)
       REFERENCES CONNEXION (PSEUDO);
Voila Meci
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h23   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Mauvais choix :
Tu devrais ajouter un identifiant de type entier auto-incrémenté.

Comme tu n'as pas précisé le moteur InnoDB à la création des tables, c'est probablement le moteur MyISAM par défaut qui a été arbitrairement choisi par MySQL. Et MyISAM se moque totalement des clés étrangères ! Il accepte la syntaxe mais ne les implémente pas. Il faut passer au moteur InnoDB.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h37   #5
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Ok je vais modifier en InnoDb merci beaucoup,
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h46   #6
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Alors J'ai essayer en type INnoDb voici le 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
CREATE TABLE CONNEXION
(
    PSEUDO                CHAR(50)              NOT NULL,
    MDP                   CHAR(50)              NOT NULL,
    EMAIL                 CHAR(250)             NOT NULL,
    ENLIGNE               DECIMAL(1)            NOT NULL,
    PRIMARY KEY (PSEUDO) 
)TYPE = InnoDB;
 
CREATE TABLE PROFIL
(
    IDPROFIL              INTEGER               NOT NULL AUTO_INCREMENT,
    PSEUDO                CHAR(50)              NOT NULL,
    IDPERSO               INTEGER                       ,
    IDLOCA                INTEGER               NOT NULL,
    IDPRESENTATION        INTEGER                       ,
    IDDITEPLUS            INTEGER                       ,
    SEXE                  CHAR(6)               NOT NULL,
    DATENAISSANCE         DATE                  NOT NULL,
    LANGUEPARLER          CHAR(100)                      ,
    TAILLE                INTEGER                       ,
    CHEVEUX               CHAR(50)                      ,
    NIVETUDE              CHAR(50)                      ,
    CATPROF               CHAR(50)                      ,
    STATMARITAL           CHAR(50)                      ,
    ETHNIC                CHAR(50)                      ,
    YEUX                  CHAR(50)                      ,
    PROFESSION            CHAR(50)                      ,
    LONGUEURCHEVEUX       CHAR(50)                      ,
    SIGNEPART             CHAR(50)                      ,
    ATTRAY                CHAR(50)                      ,
    PILOSITE              CHAR(50)                      ,
    SILHOUETTE            CHAR(50)                      ,
    PRIMARY KEY (IDPROFIL) 
)TYPE = InnoDB;
 
 
ALTER TABLE CONNEXION
    ADD constraint FOREIGN KEY (PSEUDO)
       REFERENCES PROFIL (PSEUDO);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (PSEUDO)
       REFERENCES CONNEXION (PSEUDO);
Je sais que tu m'as dis de mettre un id a la place du pseudo comme primary mais je dois utilisé le pseudo...

Seulement les contraintes ne fonctionne toujours pas :/
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 06h13   #7
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 527
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 527
Points : 3 515
Points : 3 515
Citation:
Envoyé par waldpest Voir le message
Je sais que tu m'as dis de mettre un id a la place du pseudo comme primary mais je dois utilisé le pseudo...
Rien n'empêche déclarer la colonne PSEUDO en index UNIQUE et de créer une colonne d'identifiant PRIMARY KEY auto-incrémentée.
Question de performances, je présume.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h38   #8
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:
Envoyé par waldpest Voir le message
Seulement les contraintes ne fonctionne toujours pas :/
Qu'est-ce qui ne marche pas ?

Y a t-il un message d'erreur ?

Quelle version de MySQL ?

Le moteur innoDB est-il actif ?
Citation:
Envoyé par MySQL
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,
Je ne vois pas cet index pour PSEUDO (dans la table profil)
__________________
"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 17/11/2010, 09h49   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Ce n'est pas TYPE = InnoDB mais ENGINE = InnoDB

Citation:
Je sais que tu m'as dis de mettre un id a la place du pseudo comme primary mais je dois utilisé le pseudo
Pourquoi dois-tu utiliser le pseudo comme clé primaire ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 10h11   #10
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
Et toutes ces colonnes en CHAR augurent une future obésité de la base. Sans parler des redondances puisque beaucoup de colonnes vont contenir des infos similaires (LANGUEPARLER, TAILLE,CHEVEUX ,NIVETUDE, CATPROF, YEUX) mais impossibles à exploiter sauf à utiliser LIKE sytématiquement.

Je m'interroge sur LONGUEURCHEVEUX... pourquoi en CHAR et pas integer ?

Enfin, je me permets de t'alerter sur la mémorisation ce genre de données qui est sévèrement encadrée en France (et peut-être ailleurs) !
__________________
"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 18/11/2010, 03h04   #11
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
J'ai trouver le problème.
Effectivement la version mysql que j'utilisé n'était pas la bonne...

Du coup il ne prenait pas en compte le InnoDb :/

Merci à tous
waldpest 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 16h13.


 
 
 
 
Partenaires

Hébergement Web