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

Installation MySQL Discussion :

mysql et les foreign key


Sujet :

Installation MySQL

  1. #1
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut mysql et les foreign key
    hello tout le monde...

    j'ai une table personne et une table pays et j'aimerais lieer ces table avec une foreign key

    alors voila mon script :

    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
    29
    30
    31
    32
    33
     
    CREATE TABLE Pays (
      pay_id INT(4) NOT NULL AUTO_INCREMENT,
      pay_nom VARCHAR(45) NOT NULL,
      PRIMARY KEY(pay_id)
    )
    TYPE=InnoDB;
     
     
     
    CREATE TABLE Personne (
      per_id INT(11) NOT NULL AUTO_INCREMENT,
      per_nom VARCHAR(25) NOT NULL,
      per_prenom VARCHAR(25) NOT NULL,
      per_sexe CHAR NOT NULL,
      per_dateNaiss DATE NOT NULL,
      per_email VARCHAR(45) NOT NULL,
      per_login VARCHAR(20) NOT NULL,
      per_password VARCHAR(12) NOT NULL,
      per_npa VARCHAR(10) NOT NULL,
      per_localite VARCHAR(45) NOT NULL,
      per_adresse TEXT NULL,
      pay_id INT(4) NOT NULL,
      per_statut CHAR NULL,
      PRIMARY KEY(per_id),
      UNIQUE INDEX Index_login(per_login),
      INDEX Personne_FKIndex1(pay_id),
      FOREIGN KEY(pay_id)
        REFERENCES Pays(pay_id)
          ON DELETE RESTRICT
          ON UPDATE RESTRICT
    )
    TYPE=InnoDB;
    Le problème c'est quand j'insère un enregistrement dans la table personne qui pointe sur un pays qui n'exite pas l'enregistrement est quand meme inséré !

    Comment ca ce fait ?
    j'ai mysql 4.0.15

  2. #2
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par soad
    hello tout le monde...

    j'ai une table personne et une table pays et j'aimerais lieer ces table avec une foreign key

    alors voila mon script :
    ...
    FOREIGN KEY(pay_id)
    REFERENCES Pays(pay_id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
    )
    TYPE=InnoDB;
    [/CODE]

    Le problème c'est quand j'insère un enregistrement dans la table personne qui pointe sur un pays qui n'exite pas l'enregistrement est quand meme inséré !

    Comment ca ce fait ?
    j'ai mysql 4.0.15
    Bonjour,
    ce n'est pas plutôt "cascade" que "restrict" dans ce cas ?
    Cordialement,
    Christophe Charron

  3. #3
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    j'ai essayé mais ca change rien !!!

  4. #4
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par soad
    j'ai essayé mais ca change rien !!!
    Le pays en question qui n'existe pas, c'est un identifiant <> 0 ?
    Cordialement,
    Christophe Charron

  5. #5
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par soad
    j'ai essayé mais ca change rien !!!
    heu j'avais lu en diagonale ... je ne vois pas la mention de la contrainte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    CONSTRAINT `perso_pays` FOREIGN KEY(pay_id) REFERENCES Pays(pay_id) ON DELETE RESTRICT ON UPDATE RESTRICT
    ?
    Cordialement,
    Christophe Charron

  6. #6
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Christophe Charron
    Le pays en question qui n'existe pas, c'est un identifiant <> 0 ?
    Que ce soit 0 ou autre chose ca fait la meme chose ! En faite j'ai aucun enregistrement dans pays donc ils ne devrait pas etre possible d'ajouter une personne !


    Citation Envoyé par Christophe Charron
    heu j'avais lu en diagonale ... je ne vois pas la mention de la contrainte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    CONSTRAINT `perso_pays` FOREIGN KEY(pay_id) REFERENCES Pays(pay_id) ON DELETE RESTRICT ON UPDATE RESTRICT
    ?
    Avec la mention CONSTRAINT ou pas, il y a aucun changement !

    C'est quand meme vraiment bizarre !

  7. #7
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Ton code fonctionne chez moi.

    Etant donné que MySQL ne provoque pas une erreur (mais un warning) si le moteur n'est pas valide lors d'une création de table, je te conseille de faire deux tests.

    1) Vérifie que InnoDB est possible sur ton serveur :
    2) Vérifie que tes tables utilisent bien InnoDB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHOW TABLE STATUS LIKE 'Personne'
    SHOW TABLE STATUS LIKE 'Pays'
    A part ça, je n'ai pas d'autres idées.

  8. #8
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Biglo
    Ton code fonctionne chez moi.

    Etant donné que MySQL ne provoque pas une erreur (mais un warning) si le moteur n'est pas valide lors d'une création de table, je te conseille de faire deux tests.

    1) Vérifie que InnoDB est possible sur ton serveur :
    2) Vérifie que tes tables utilisent bien InnoDB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHOW TABLE STATUS LIKE 'Personne'
    SHOW TABLE STATUS LIKE 'Pays'
    A part ça, je n'ai pas d'autres idées.
    Ouais c'était ca !!!
    Cette fois easyPHP va partir à la poubelle, c'est peut etre rapidement installer mais y a tjs des trucs qui merde avec !
    merci beaucoup

  9. #9
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Citation Envoyé par soad
    Ouais c'était ca !!!
    Cette fois easyPHP va partir à la poubelle, c'est peut etre rapidement installer mais y a tjs des trucs qui merde avec !
    merci beaucoup
    Je voudrais connaitre la suite. Quel était l'erreur et avais-tu configuré la table pour qu'elle soit en InnoDb ?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #10
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par berceker united
    Je voudrais connaitre la suite. Quel était l'erreur et avais-tu configuré la table pour qu'elle soit en InnoDb ?
    En faite le code sql était juste mais les tables ne se mettait pas en innoDB ! j'ai changer de serveur mysql et maintenant ca marche ! avant j'avais easyPHP 1.7 avec MySQL 4.0.15 je crois !

  11. #11
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Mais phpmyadmin ne proposait pas des moteir dont le serveur pouvais disposer ?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  12. #12
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par berceker united
    Mais phpmyadmin ne proposait pas des moteir dont le serveur pouvais disposer ?
    Non ! a mon avis c'était mysql ! pcq je créais pas mes tables avec l'outils de création de table de phpmyadmin mais en exécutant le code sql du 1er message de ce poste !

  13. #13
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Ok je comprend mieux alors. Merci
    Et bonne décision sur le faite de faire une installe à la mano
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/07/2007, 14h53
  2. probléme dans les foreign key
    Par infomari dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/07/2007, 15h44
  3. [MySQL] Utilisation des Foreign Key
    Par Regnak dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/08/2006, 15h37
  4. [mysql]table avec foreign key
    Par samjung dans le forum Langage SQL
    Réponses: 24
    Dernier message: 24/11/2005, 14h42
  5. pbm avec les foreigns keys.....
    Par j_bonc dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/06/2004, 10h23

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