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 :

Suppression en cascade ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut Suppression en cascade ?
    Bonjour,
    je sais pas si c'est bien le titre exacte mais mon probléme est le suivant :

    pour ces 2 tables missions et livrables (on a chaque IDLivrable est associé a un IDMission) et lorsque je supprime une Mission je supprime tout ses fils mais le probléme que je voudrais aussi supprimer les livrables correspondants dans la table livrables

    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
    CREATE TABLE `missions` (
      `IDMission` int(11) NOT NULL default '0',
      `IDParent` int(11) default NULL,
      `IDProjet` int(11) NOT NULL default '0',
      `Libelle` varchar(254) default NULL,
      `chemin` varchar(254) NOT NULL default '',
      PRIMARY KEY  (`IDMission`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    CREATE TABLE `livrables` (
      `IDLivrable` int(11) NOT NULL default '0',
      `IDMission` int(11) NOT NULL default '0',
      `IDProjet` int(11) NOT NULL default '0',
      `Libelle` varchar(254) default NULL,
      `Type` varchar(254) default NULL,
      PRIMARY KEY  (`IDLivrable`,`IDMission`,`IDProjet`),
      UNIQUE KEY `IDMission` (`IDMission`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    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
    INSERT INTO `missions` VALUES (11, 0, 1, 'Mission2', '11-');
    INSERT INTO `missions` VALUES (12, 0, 1, 'Mission4', '12-');
    INSERT INTO `missions` VALUES (16, 11, 1, 'Sous-Mission2-1', '11-16-');
    INSERT INTO `missions` VALUES (10, 0, 1, 'Mission3', '10-');
    INSERT INTO `missions` VALUES (1, 0, 1, 'Mission1', '1-');
    INSERT INTO `missions` VALUES (17, 11, 1, 'Sous-Mission2-2', '11-17-');
    INSERT INTO `missions` VALUES (14, 0, 2, 'Mission1', '14-');
    INSERT INTO `missions` VALUES (15, 0, 2, 'Mission2', '15-');
     
    INSERT INTO `livrables` VALUES (6, 12, 1, 'Livrable de la Mission4', 'Application');
    INSERT INTO `livrables` VALUES (3, 10, 1, 'Livrable de la Mission3', 'Rapport');
    INSERT INTO `livrables` VALUES (7, 1, 1, 'Livrable de la Mission1', 'Données');
    INSERT INTO `livrables` VALUES (8, 14, 2, 'Livrable Mission1', 'Rapport');
    INSERT INTO `livrables` VALUES (9, 11, 1, 'Livrable de la Mission2', 'Application');
    INSERT INTO `livrables` VALUES (10, 16, 1, 'LivrableSM2-1', 'Rapport');
    INSERT INTO `livrables` VALUES (11, 18, 1, 'Livrable Mission5', 'Rapport');
    code de suppression des missions (en php)
    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
    function deleteMissions($IDMission)
    		{
    		// Requête
    		$cle = $IDMission.'-';
    		$sql = "DELETE FROM missions WHERE chemin like '%$cle%';"; 
    		// Exécution et résultat	
    		if (mysql_query($sql)) 
    			{
    			$this->message = "Suppression effectué avec succès!";
    			}
    		else
    			{ 
    			$this->message = "Un problème est survenu lors de la suppression!";
    			}
    		}

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Points : 110
    Points
    110
    Par défaut
    Pour cela il faut une foreign key (FK) avec suppression en cascade.
    Il me semble que dans la version 5.0 les FK sont supportées dans les tables de type Misam. Les FK sont supportées depuis très longtemps avec les tables Innodb.

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oui, ou alors quand tu supprime une Mission, tu fait une requête qui supprime les Livrables qui on comme IDMission la mission que tu supprime... non?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    merci les gars pour votre reponse mais la solution "faire une requête qui supprime les Livrables qui on comme IDMission" et difficile a réaliser donc je voudrais qu'on m'explique plus "les foreign key (FK)" avec un exemple si possible.

    PS : j'utilise mySQL v4.3.10

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Points : 110
    Points
    110
    Par défaut
    http://dev.mysql.com/doc/refman/5.0/...nstraints.html

    http://dev.mysql.com/doc/refman/5.0/en/roadmap.html

    Dans la future version 5.2 sont prévues les FK pour les tables MyIsam.
    Donc pour l'instant elles ne sont supportées que par les tables Innodb.

    Voir ci-dessous pour une explication
    http://qwix.media-box.net/index.php/...sAvezDitInnoDb

    Voilà !

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Merci brice01 je vais essayé tout ça

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

Discussions similaires

  1. Suppression en cascade
    Par music03 dans le forum Installation
    Réponses: 1
    Dernier message: 29/07/2005, 20h47
  2. suppression en cascade dans formulaire et sous-formulaire
    Par tooneygirl dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 14h17
  3. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  4. Suppression en cascade
    Par log2n dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2005, 20h33
  5. [debutant]suppression en cascade
    Par christophebmx dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 03/05/2005, 09h51

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