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

Requêtes MySQL Discussion :

Problème d'intégrité référentielles


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut Problème d'intégrité référentielles
    Bonjour,
    Comme indiqué dans le post, j'ai un problème avec mes intégrités référentielles.
    J'emploie MySQL 5.0 avec la dernière version de php.

    J'ai 3 tables qui me permettent de faire une classification hiérarchique d'ip.

    sousreseau(id,...)
    zone(id,...)
    sousreseaumenu(id,ssreseauparent,zone)

    sousreseaumenu.id référence sousreseau.id
    sousreseaumenu.ssreseauparent référence sousreseau.id
    sousreseaumenu.zone référence zone.id

    J'ai un "on delete cascade" et un "on update cascade" pour chacune

    Je veux insérer une entrée dans sousreseau ainsi que dans sousreseaumenu. Je commence à faire ma première requête et tout fonctionne très bien. Par contre la seconde me dit que j'ai un problème de contrainte.
    voici ma deuxième requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO sousreseaumenu (id,ssparent,zoneid) VALUES ('$id','$radio',NULL)
    Elle est employée dans le cas où je veux mettre un nouveau sous-réseau dépendant directement d'une zone.

    Par contre, qd je passe par phpmyadmin pour faire les insertions, ca fonctionne.(j'ai cependant un beau message d'erreur de sa part mais qui est indépendant de mysql ).

    Auriez-vous une idée pour résoudre mon problème???

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    quel est le message d'erreur exact?
    quel langage utilises-tu pour faire tes insertions.
    Pourrais tu afficher
    INSERT INTO sousreseaumenu (id,ssparent,zoneid) VALUES ('$id','$radio',NULL)
    pour voir quelles valeurs ont $id et $radio
    es-tu sûr que zoneid peut-être mis à NULL?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta réponse rapide.

    j'utilise php pour faire mes insertions.

    voici un extrait de code avec contenant mes deux requêtes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $id= sprintf("%s%s%s%s",$ipa,$ipb,$ipc,$masque);
    $query = "INSERT INTO sousreseau
    (id,description,ip_a,ip_b,ip_c,ip_d,masque,notes,datedm,quidm,nom_site)" .
    " VALUES ('$id', '$description', '$ipa', '$ipb', '$ipc', '$ipd',' $masque', '$note', '$datedm', '$quidm', NULL)";
     
    $query2 = "INSERT INTO sousreseaumenu (id,ssparent,zoneid) VALUES  ('$id','$radio',NULL)";
    l'ip insèrée est par exemple 10.33.15.0/16. l'id ne change pas entre query et query2. les champs ip's et masque sont les seuls à devoir être non-null (+ l'id évidement).
    Dans la table sousreseaumenu, ssparent et zoneid peuvent être null car en fait, c'est l'un ou l'autre qui peut avoir une valeur mais pas les deux.

    voici le message d'erreur que php me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: mysql_query() [http://www.mysql.com/doc]: Cannot add or update
     a child row: a foreign key constraint fails (`ipmg1dev/sousreseaumenu`, CONSTRAINT `sousreseaumenu_ibfk_3` FOREIGN KEY (`zoneid`) REFERENCES 
    `zone` (`zoneid`) ON DELETE CASCADE ON UPDATE CASCADE) in C:\www\IPManager\network_add.php on line 69
    Merci d'avance

  4. #4
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    tu donnes comme contrainte que zoneid (table sousreseaumenu) référence zone.id, or par définition je pense que zone.id ne peut être null? non?
    d'où le problème d'intégrité référentielle.

    Pour contourner ça tu peux créer un zone.id = 0 qui correspondrait à ton null. Tu mettrais alors zoneid (table sousreseaumenu) à 0 au lieu de NULL et ton intégrité référentielle est respectée.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    En fait, je voulais ne pas avoir besoin de ce genre d'entrée dans ma table. Mais je pense que je vais suivre ton conseil car ce sera plus facile.

    Merci beaucoup

    ps: par contre, il me semble que ca peut être null car vu que tu peux faire on [delete|update] set null.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/07/2010, 12h47
  2. [Conception]Problème d'intégrité référentielle
    Par golnok dans le forum Modélisation
    Réponses: 2
    Dernier message: 17/04/2007, 15h07
  3. Problème d'intégrité référentielle
    Par guiguikawa dans le forum Access
    Réponses: 15
    Dernier message: 23/05/2006, 15h25
  4. [Héritage] problème intégrité référentielle
    Par Ouark dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/01/2006, 18h47
  5. Réponses: 5
    Dernier message: 26/10/2005, 14h43

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