{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 -
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:
Table statut:
Ma requête:
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. ;)
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:
- {MySQL} Problème clé étrangère
- Clé usb non détectée - Guide
- Clé windows 8 - Guide
- Formater clé usb - Guide
- Clé usb - Accueil - Stockage
- Clé bootable windows 10 - Guide
5 réponses
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`)"
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alors je viens de passer toute mes tables InnoDB mais rien ne change :'(
ç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.
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.