Rechercher : dans
Par :

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

Dernière réponse le 12 jun 2009 à 11:54:21 Huviel, le 12 jun 2009 à 09:59:42 
 Signaler ce message aux modérateurs

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. ;)

Meilleures réponses pour « {MySQL} Problème clé étrangère » dans :
Avast familial : renouveler / enregistrer sa clé de licence Voir1) Obtenir une nouvelle licence 2) Enregistrer sa nouvelle licence 1) Obtenir une nouvelle licence 1.1) Pour renouveler la clé de licence, se rendre sur le site d'Avast et remplir le formulaire d'inscription qui se trouve ICI. 1.2)...
Formater une clé USB VoirLes clés USB doivent nécessairement être formatées avec le système de fichiers FAT (FAT16 ou FAT32) pour pouvoir être utilisées par les principaux systèmes d'exploitation. Sous Windows Or, pour une clé USB de capacité supérieure à 32Mo, Windows...
Antivirus gratuit sur clé USB VoirParfois il peut être utile d'emporter des antivirus sur clé USB: pour tester une machine qui n'a pas de connexion internet pour tester une machine qui ne vous appartient pas (famille, amis, cybercafé...) ou qui ne possède pas d'antivirus pour...
SQL - Contraintes d'intégrité VoirExpression de contraintes d'intégrité Une contrainte d'intégrité est une clause permettant de contraindre la modification de tables, faite par l'intermédiaire de requêtes d'utilisateurs, afin que les données saisies dans la base soient...
Clé USB VoirIntroduction à la notion de clé USB Une clé USB (en anglais USB key) est un périphérique de stockage amovible de petit format pouvant être branché sur le port USB d'un ordinateur. Une clé USB embarque dans une coque plastifiée un...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...

1

sya21, le 12 jun 2009 à 10:03:38

Il faut préciser une clé étrangére foreign key dans l'une des 2 tables

Répondre à sya21

2

Huviel, le 12 jun 2009 à 10:10:02

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`)"

Répondre à Huviel

3

sya21, le 12 jun 2009 à 10:11:49

Ah d'accord désole je vois pas

Répondre à sya21

4

Giorgiolino, le 12 jun 2009 à 10:23:31

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.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein

Répondre à Giorgiolino

5

Huviel, le 12 jun 2009 à 10:28:22

Alors je viens de passer toute mes tables InnoDB mais rien ne change :'(

Répondre à Huviel

6

 Giorgiolino, le 12 jun 2009 à 11:54:21

ç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.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein

Répondre à Giorgiolino
Collection CommentÇaMarche.net