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

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

5 réponses

  1. il faut préciser une clé étrangére foreign key dans l'une des 2 tables
    1. 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`)"
      1. Contributeur
        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.
        1. Alors je viens de passer toute mes tables InnoDB mais rien ne change :'(
          1. Contributeur
            ç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.

        Discussions similaires

        cle wifi pour tv

        5 réponses