IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Problème avec les clés étrangères


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut Problème avec les clés étrangères
    Bonjour

    Je voudrais savoir comment marche les clés étrangères sous mysql. Pour cela j'ai crée 2 tables : client et coordonnee.
    L'idée est qu'un client peut avoir plusieurs coordonnées.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE TABLE `client`
    (
      `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
      `nom` VARCHAR( 50 ) NOT NULL,
      `prenom` VARCHAR( 50 ) NOT NULL,
      PRIMARY KEY  (`id`),
    ) TYPE=INNODB
      ENGINE=MyISAM 
      DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
      COMMENT = 'table contenant les clients'
    ;
     
     
    CREATE TABLE `coordonnee`
    (
      `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
      `id_client` INT( 11 ) NOT NULL,
      `adresse` LONGTEXT NOT NULL COMMENT 'adresse postale',
      `code_postal` VARCHAR( 20 ) NOT NULL,
      `ville` VARCHAR( 50 ) NOT NULL,
      `telephone` VARCHAR( 20 ) NOT NULL,
      PRIMARY KEY  (`id`),
      FOREIGN KEY(id_client) REFERENCES client(id) ON DELETE CASCADE
    ) TYPE=INNODB
      ENGINE=MyISAM 
      DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
      COMMENT = 'table contenant les coordonnées d un client'
    ;
    Cependant je peux insérer des données dans la table coordonnee sans qu'il y ait de client associé. ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `coordonnee` (`id`, `id_client`, `adresse`, `code_postal`, `ville`, `telephone`) 
    VALUES (1, 1, '1 rue des halles', '75001', 'Paris', '0102030405');

    J'aurai pensé avoir une erreur du genre "le client 1 n'existe pas" non ?


    ensuite je crée un client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `client` ( `id` , `nom` , `prenom` )
    VALUES ('1', 'toto', 'titi');
    si je le supprime j'aurai pensé que ça supprimerai la coordonnée associée, mais ce n'est pas le cas.

    Je me suis trompé quelque part ?


    merci de votre aide

    PoichOU

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Citation Envoyé par PoichOU Voir le message

    si je le supprime j'aurai pensé que ça supprimerai la coordonnée associée, mais ce n'est pas le cas.

    Je me suis trompé quelque part ?


    merci de votre aide

    PoichOU

    pour supprimer tu fais bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP TABLE nomtable CASCADE CONSTRAINT;
    ?

  3. #3
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    salut, merci de ta réponse,

    euh non je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM client WHERE id=1

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Si je ne fait pas fausse route, MyISAM ne supporte pas les contraintes liées aux clés étrangères (InnoDB oui par contre).

  5. #5
    Nouveau membre du Club Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 36
    Points
    36
    Par défaut
    J'allais dire comme JinJu qui m'a devancé =)

    Si tu veux utiliser les contraintes d'intégritées liées au clé étrangère, tu dois convertir tes 2 tables de MyISAM à InnoDB.

    MyISAM est très rapide mais ne gère pas les clés étrangères, donc tu dois passer tes tables en InnoDB.

    Les contraintes CASCADES marche sans problème sous InnoDB.

    A+

  6. #6
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    c'est bien ce que j'avais cru voir mais j'sais pas pkoi j'avais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE=INNODB
      ENGINE=MyISAM
    merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/07/2012, 14h27
  2. [Core] Problème avec les clés étrangères
    Par leara500 dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/07/2012, 09h37
  3. Réponses: 10
    Dernier message: 27/03/2011, 14h27
  4. [EJB2.1 Entity] [CMP] [xdoclet] Problème avec les clés primaires
    Par shingo dans le forum Java EE
    Réponses: 1
    Dernier message: 10/02/2006, 17h41
  5. [CONCEPTION MCD] Problème avec les clés composées
    Par fabriceMerc dans le forum Schéma
    Réponses: 3
    Dernier message: 14/02/2005, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo