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

Huviel Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
Giorgiolino Messages postés 253 Date d'inscription   Statut Contributeur Dernière intervention   -
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 426 Date d'inscription   Statut Membre Dernière intervention   43
 
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   Statut Membre Dernière intervention  
 
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 426 Date d'inscription   Statut Membre Dernière intervention   43
 
ah d'accord désole je vois pas
0
Giorgiolino Messages postés 253 Date d'inscription   Statut Contributeur Dernière intervention   52
 
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   Statut Membre Dernière intervention  
 
Alors je viens de passer toute mes tables InnoDB mais rien ne change :'(
0
Giorgiolino Messages postés 253 Date d'inscription   Statut Contributeur Dernière intervention   52
 
ç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