{MySQL} Problème clé étrangère

Fermé
Huviel Messages postés 3 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 12 juin 2009 - 12 juin 2009 à 09:59
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 - 12 juin 2009 à 11:54
Bonjour à tous,

Voilà j'ai un problème au niveau de Mysql qui lors d'une requête me renvoie 0 enregistrement. Bien entendu les tables sont remplis.

Table utilisateur:

CREATE TABLE IF NOT EXISTS `utilisateur` (
  `id_util` int(11) NOT NULL AUTO_INCREMENT,
  `nom_util` varchar(20) NOT NULL,
  `prenom_util` varchar(20) NOT NULL,
  `login` varchar(20) NOT NULL,
  `pass` varchar(20) NOT NULL,
  `statut` int(11) NOT NULL,
  PRIMARY KEY (`id_util`),
  KEY `id_statut` (`statut`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


Table statut:
CREATE TABLE IF NOT EXISTS `statut` (
  `id_statut` int(11) NOT NULL AUTO_INCREMENT,
  `intitule_statut` varchar(20) NOT NULL,
  PRIMARY KEY (`id_statut`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;


Ma requête:
SELECT nom_util, prenom_util, intitule_statut
FROM statut, utilisateur
WHERE utilisateur.statut = statut.id_statut;

A noter que mysql a réécris à sa sauce la syntaxe de mes tables (Je dis ça pour la syntaxe de ma FK dans la table utilisateur).

Merci pour votre aide car là je panique un peu et je vois pas mon erreur. ;)
A voir également:

5 réponses

sya21 Messages postés 425 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 7 janvier 2010 43
12 juin 2009 à 10:03
il faut préciser une clé étrangére foreign key dans l'une des 2 tables
0
Huviel Messages postés 3 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 12 juin 2009
12 juin 2009 à 10:10
C'est ce que j'ai fais dans la table utilisateur. Sauf que PhpMyAdmin à remis sa syntaxe par dessus ce qui donne ça pour ma FK "KEY `id_statut` (`statut`)"
0
sya21 Messages postés 425 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 7 janvier 2010 43
12 juin 2009 à 10:11
ah d'accord désole je vois pas
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
12 juin 2009 à 10:23
Bonjour,

ton problème est du au moteur de base de données que tu utilises, à savoir MyISAM.
Ce moteur ne gère pas les contraintes d'intégrité référentielles. Donc il lit les contraintes
de clés étrangères FOREIGN KEY mais n'en tient pas compte.

Il te faut utiliser le moteur InnoDB pour gérer les clés étrangères.

Bonne suite.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Huviel Messages postés 3 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 12 juin 2009
12 juin 2009 à 10:28
Alors je viens de passer toute mes tables InnoDB mais rien ne change :'(
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
12 juin 2009 à 11:54
ça ne suffit pas, il aurait fallu créer ta table comme ceci :

CREATE TABLE IF NOT EXISTS `utilisateur` (
`id_util` int(11) NOT NULL AUTO_INCREMENT,
`nom_util` varchar(20) NOT NULL,
`prenom_util` varchar(20) NOT NULL,
`login` varchar(20) NOT NULL,
`pass` varchar(20) NOT NULL,
`statut` int(11) NOT NULL,
PRIMARY KEY (`id_util`),
FOREIGN KEY (`statut`)
REFERENCES `statut`(`id_statut`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


As-tu pensé à rajouter la contrainte de clé étrangère ?

P.S.
J'ai testé tes scripts avec phpMyAdmin 3.1.3 et ça m'a plutôt l'air de fonctionner.

Mes valeurs de test :
table utilisateur:
insert into utilisateur( `nom_util` , `prenom_util` ,`login` , `pass` , `statut` )
values ('DUCK', 'Riri','Ririlog','Riripass', 1),
('DUCK', 'Fifi','Fifilog','Fifipass', 2),
('DUCK', 'Loulou','Louloulog','Louloupass', 3);

table statut :
insert into statut( `id_statut` , `intitule_statutl` )
values (1, 'premier'),
(2, 'deuxieme'),
(3, 'troisieme');


en exécutant ta requête, j'obtiens ceci:

nom_util prenom_util intitule_statut
DUCK Riri premier
DUCK Fifi deuxieme
DUCK Loulou troisieme



Vérifies tes opérations et au besoins refais tourner ton script.
0