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 :

ON DELETE CASCADE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut ON DELETE CASCADE
    Bonjour,
    voila j'espere que je poste au bon endroit, je ne savais pas trop quelle section était la plus concernée par mon problème.

    Donc mon problème:
    - ne connaissant pas trop comment fonctionne le on delete cascade, j'ai créé les tables de test innodb test1, test2, test3 comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    test1(id_test1, nom_test1, #id_test2);
    test2(id_test2, nom_test2, #id_test3);
    test3(id_test3, nom_test3);
    Depuis phpmyadmin, j'ai déclaré dans la partie gestion des relations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test1: #idtest2 -> test2.id_test2 -> ON DELETE CASCADE 
    test2: #idtest3 -> test3.id_test3 -> ON DELETE CASCADE
    Je mets donc en place un petit jeu de test, et je vois depuis phpmyadmin que au niveau relation, je peux bien naviguer entre les id des tables différentes (via des liens)

    A partir de quoi je pensais que tout était bon et que les suppression en cascade allait se faire, mais bizarrement non...

    J'essaie de faire une requete toute bete du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM test1 where id_test1=1
    (depuis la partie sql de phpmyadmin, et depuis une page web...)

    et la je constate que dans test1, l'id 1 a bien été supprimé, mais dans test2 et test3, rien n'a changé, mon jeu de test est toujours au complet...Pas de suppression en cascade...

    Qu'ais-je oublié ? Qu'ais-je fais de travers ? Ca fait depuis hier que je cherche sur le net, mais tout a l'air bon, je commence à desesperer (lol)

    Si vous avez des questions n'hésitez pas, je veux trouver pourquoi ma minibase de test ne marche pas...

    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 36
    Par défaut
    Bonjour,

    As-tu pensé à la création de clé étrangère comme ci-dessous:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    -- -----------------------------------------------------
    -- Table `test3`
    -- -----------------------------------------------------
    CREATE  TABLE `test3` (
      `id_test3` INTEGER NOT NULL AUTO_INCREMENT ,
      `nom_test3` VARCHAR,
      PRIMARY KEY (`id_test3`) )
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `test2`
    -- -----------------------------------------------------
    CREATE  TABLE `test2` (
      `id_test2` INTEGER NOT NULL AUTO_INCREMENT ,
      `nom_test2` VARCHAR,
      `id_test3` INTEGER,
      PRIMARY KEY (`id_test2`) ,
      INDEX (`id_test3`) ,
      CONSTRAINT `id_test3`
        FOREIGN KEY ( `id_test3` )
        REFERENCES `test1` (`id_test3` )
        ON DELETE CASCADE
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    -- -----------------------------------------------------
    -- Table `test1`
    -- -----------------------------------------------------
    CREATE  TABLE `test1` (
      `id_test1` INTEGER NOT NULL AUTO_INCREMENT ,
      `nom_test1` VARCHAR,
      `id_test2` INTEGER,
      PRIMARY KEY (`id_test1`) ,
      INDEX (`id_test2`) ,
      CONSTRAINT `id_test2`
        FOREIGN KEY ( `id_test2` )
        REFERENCES `test2` (`id_test2` )
        ON DELETE CASCADE
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    Voilà, j'avoue ne pas avoir vérifier le code mais çà devrait être bon...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Alors oui, j'avais bien défini les cléfs étrangères, du moins je le pense j'avais créé les tables avec l'interface de phpmyadmin, pas directement en SQL, je vais retester avec ces nouvelles tables, j'ai peut etre fais une mauvaise manip, mais honnetement je ne le crois pas. Je teste, et je reviens. Merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    me revoila avec un environnmenet plus précis:
    alors j'ai créé 3 nouvelles tables directement en sql:
    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
     
    CREATE  TABLE `test6` (
      `id_test6` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `nom_test6` VARCHAR(40) NOT NULL
       )
    ENGINE = InnoDB
     
    CREATE  TABLE `test5` (
      `id_test5` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `nom_test5` VARCHAR(40) NOT NULL,
      `id_test6` INTEGER NOT NULL ,
      INDEX (`id_test6`),
      FOREIGN KEY (`id_test6`) REFERENCES `test6` (`id_test6`) ON DELETE CASCADE ON UPDATE NO ACTION
    ) ENGINE = InnoDB;
     
    CREATE  TABLE `test4` (
      `id_test4` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `nom_test4` VARCHAR(40) NOT NULL,
      `id_test5` INTEGER NOT NULL ,
      INDEX (`id_test5`),
      FOREIGN KEY (`id_test5`) REFERENCES `test5` (`id_test5`) ON DELETE CASCADE ON UPDATE NO ACTION
    ) ENGINE = InnoDB;
    j'ai refait mon petit jeu d'essai en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from test4 where id_test4=4
    Et la toujours pas de suppression en cascade, pourtant, tout est bien défini dans phpmyadmin, j'ai bien tout mes liens avec tous mes attributs définis, on delete etc...

    Quelq'un a til le remede miracle ?? Panoramix est-il dans le coin ? lol

    Merci

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 36
    Par défaut
    Ok.

    Tout d'abord, je crois que tu as oublié un point virgule après ta première création de table.
    Ensuite pour cette dernière commande c'est tout à fait normal qu'il ne se passe rien car apparemment aucune table ne dépend de la table test4.
    Il aurait fallut supprimer un élément de la table test6 qui soit présent dans toutes les autres tables pour utiliser les propriétés de ON DELETE CASCADE.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    OK, effectivement, ca marche à l'envers, casse tete pour mettre cela en place dans ma base de donnée assez compliquée...M'enfin bon, on va faire au mieux.
    Je vous remercie de m'avoir aidé a trouver mon soucis!!
    Et comme dirai Eric cantona dans une tres vieille pub: "Au revoir..."

    ps: GTO rocks

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

Discussions similaires

  1. On Delete Cascade
    Par malbarre dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/07/2006, 11h40
  2. SQL Delete Cascade
    Par mschoum dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/06/2006, 14h18
  3. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48
  4. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  5. Delete cascade --> problème de temps de traitement
    Par celine31 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/01/2006, 12h03

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