Requete de suppression SQL (MySql) pour pro

Résolu
Xeno -  
Xeno123 Messages postés 132 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

alors voila mon probleme, il me faut faire une requete de suppression avec mysql, jusque là rien de compliquer, ce qui ce corse un peu c'est que je dois la faire sur plusieurs tables

je vous join le MLD du projet pour mieux comprendre quel type d'aide je souhaite :)

MLD : http://i.imgur.com/Yk7Ze.png
Donc voila, je souhaite faire une requete pour supprimer une application, cependant il me faut aussi supprimer tous les flux lier a cette application, tous les environnement d'origine et de destination lier a ces flux et ça en une seule requete de préférence car c'est bien beau de supprimer l'application mais il faut aussi supprimer tous ce qui est "en rapport" avec cette application (flux, environnements...)

si quelqu'un, un pro du sql est là, j'implore son aide :)
merci


A voir également:

10 réponses

wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
Salut,
Essaye ça , normalement ça devrait marcher.

DELETE FROM application LEFT JOIN contient ON(application.id_appli=contient.id_appli) LEFT JOIN flux ON(contient.id_flux=flux.id_flux) LEFT JOIN correpond ON (flux.id_flux=correpond.id_flux) LEFT JOIN correspondance ON (correpond.id_corres=correspondance.id_corres) LEFT JOIN lier ON (flux.id_flux=lier.id_flux) LEFT JOIN env_origine ON (env_origine.id_env_ori=lier.id_env_ori) LEFT JOIN env_destination ON (lier.id_env_destination=env_destination.id_env_destination) WHERE application.id_appli = $id ;  
//remplace $id par l'id de l'appli que tu veux supprimer
1
wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
c'est quand tu veux , y a pas de soucis.
bonne journée
1
Xeno123 Messages postés 132 Date d'inscription   Statut Membre Dernière intervention   23
 
je t'ai envoyer un MP si tu as le temps de le regarder :)
0
wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
Je vais regarder ça tout de suite
0
Xeno123 Messages postés 132 Date d'inscription   Statut Membre Dernière intervention   23
 
merci :) une fois de plus tu me sauveras la vie (bon c'est exagérer mais tu me dépanneras bien ^^)
0
Xeno
 
Merci d'avoir pris le temps de m'aider, je n'avais pas essayer de jointure, j'avais juste esayer des requetes imbriquées, mais le pb n'est toujours pas résolu :s

#1064 - Erreur de syntaxe près de 'LEFT JOIN contient ON(application.id_appli=contient.id_appli) LEFT JOIN flux ON(' à la ligne 1

holalala, depuis ce matin je galère pour une requete ...
0
wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
Si tu veux je te file mon adresse mail et envoie moi ta base de données comme ça je pourrai corriger la requete.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Xeno
 
ok je join la bdd en sql parceque je suis au taff et impossible d'envoyer des mails perso à caue du proxy ...

-- phpMyAdmin SQL Dump
-- version 3.3.9.2
-- http://www.phpmyadmin.net
--
-- Serveur: 127.0.0.1
-- Généré le : Mar 14 Juin 2011 à 15:14
-- Version du serveur: 5.5.10
-- Version de PHP: 5.3.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: 'db_carto'
--

-- --------------------------------------------------------

--
-- Structure de la table 'application'
--

CREATE TABLE IF NOT EXISTS 'application' (
  'id_appli' int(11) NOT NULL AUTO_INCREMENT,
  'nom_appli' text,
  'date_der_modif' date DEFAULT NULL,
  PRIMARY KEY ('id_appli')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table 'application'
--

INSERT INTO 'application' ('id_appli', 'nom_appli', 'date_der_modif') VALUES
(1, 'ABCDTRAIN', '2011-06-14');

-- --------------------------------------------------------

--
-- Structure de la table 'contient'
--

CREATE TABLE IF NOT EXISTS 'contient' (
  'id_appli' int(11) NOT NULL AUTO_INCREMENT,
  'id_flux' int(11) NOT NULL,
  PRIMARY KEY ('id_appli','id_flux'),
  KEY 'FK_contient_id_flux' ('id_flux')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table 'contient'
--

INSERT INTO 'contient' ('id_appli', 'id_flux') VALUES
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(1, 5),
(1, 6),
(1, 7),
(1, 8);

-- --------------------------------------------------------

--
-- Structure de la table 'correpond'
--

CREATE TABLE IF NOT EXISTS 'correpond' (
  'id_flux' int(11) NOT NULL AUTO_INCREMENT,
  'id_corres' int(11) NOT NULL,
  PRIMARY KEY ('id_flux','id_corres'),
  KEY 'FK_correpond_id_corres' ('id_corres')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table 'correpond'
--


-- --------------------------------------------------------

--
-- Structure de la table 'correspondance'
--

CREATE TABLE IF NOT EXISTS 'correspondance' (
  'id_corres' int(11) NOT NULL AUTO_INCREMENT,
  'port' text,
  'protocole' text,
  PRIMARY KEY ('id_corres')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table 'correspondance'
--


-- --------------------------------------------------------

--
-- Structure de la table 'env_destination'
--

CREATE TABLE IF NOT EXISTS 'env_destination' (
  'id_env_destination' int(11) NOT NULL AUTO_INCREMENT,
  'plateforme_dest' text,
  'appli_nom_flux_dest' text,
  'compo_middle_dest' text,
  'commentaire' text,
  PRIMARY KEY ('id_env_destination')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table 'env_destination'
--

INSERT INTO 'env_destination' ('id_env_destination', 'plateforme_dest', 'appli_nom_flux_dest', 'compo_middle_dest', 'commentaire') VALUES
(1, 'production', '', 'apache', ''),
(2, 'production', '', 'apache', ''),
(3, 'production', '', 'apache vers IIS', ''),
(4, 'production', '', 'apache vers IIS', ''),
(5, 'recette', '', 'apache', ''),
(6, 'recette', '', 'apache', ''),
(7, 'recette', '', 'apache vers IIS', ''),
(8, 'recette', '', 'apache vers IIS', '');

-- --------------------------------------------------------

--
-- Structure de la table 'env_origine'
--

CREATE TABLE IF NOT EXISTS 'env_origine' (
  'id_env_ori' int(11) NOT NULL AUTO_INCREMENT,
  'plateforme_ori' text,
  'compo_middle_ori' text,
  'appli_nom_flux_ori' text,
  'rel_int_flux_indirect' text,
  PRIMARY KEY ('id_env_ori')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table 'env_origine'
--

INSERT INTO 'env_origine' ('id_env_ori', 'plateforme_ori', 'compo_middle_ori', 'appli_nom_flux_ori', 'rel_int_flux_indirect') VALUES
(1, 'production', 'apache/http', 'abcd/http', ''),
(2, 'production', 'apache/http', 'abcd/http', ''),
(3, 'production', 'apache/http', 'apache IIS', ''),
(4, 'production', 'apache/http', 'apache IIS', ''),
(5, 'recette', 'apache/http', 'abcd/http', ''),
(6, 'recette', 'apache/http', 'abcd/http', ''),
(7, 'recette', 'apache/http', 'apache IIS', ''),
(8, 'recette', 'apache/http', 'apache IIS', '');

-- --------------------------------------------------------

--
-- Structure de la table 'est_connecte'
--

CREATE TABLE IF NOT EXISTS 'est_connecte' (
  'id_serv' int(11) NOT NULL AUTO_INCREMENT,
  'id_env_ori' int(11) NOT NULL,
  PRIMARY KEY ('id_serv','id_env_ori'),
  KEY 'FK_est_connecte_id_env_ori' ('id_env_ori')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Contenu de la table 'est_connecte'
--

INSERT INTO 'est_connecte' ('id_serv', 'id_env_ori') VALUES
(1, 1),
(1, 2),
(2, 3),
(5, 4),
(1, 5),
(1, 6),
(3, 7),
(4, 8);

-- --------------------------------------------------------

--
-- Structure de la table 'flux'
--

CREATE TABLE IF NOT EXISTS 'flux' (
  'id_flux' int(11) NOT NULL AUTO_INCREMENT,
  'categorie_flux' text,
  'type_flux' text,
  PRIMARY KEY ('id_flux')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table 'flux'
--

INSERT INTO 'flux' ('id_flux', 'categorie_flux', 'type_flux') VALUES
(1, 'client final', 'webservice'),
(2, 'client final', 'webservice'),
(3, 'applicatif direct', 'client applicatif'),
(4, 'applicatif direct', 'client applicatif'),
(5, 'client final', 'webservice'),
(6, 'client final', 'webservice'),
(7, 'applicatif direct', 'client applicatif'),
(8, 'applicatif direct', 'client applicatif');

-- --------------------------------------------------------

--
-- Structure de la table 'lier'
--

CREATE TABLE IF NOT EXISTS 'lier' (
  'id_flux' int(11) NOT NULL AUTO_INCREMENT,
  'id_env_ori' int(11) NOT NULL,
  'id_env_destination' int(11) NOT NULL,
  PRIMARY KEY ('id_flux','id_env_ori','id_env_destination'),
  KEY 'FK_lier_id_env_ori' ('id_env_ori'),
  KEY 'FK_lier_id_env_destination' ('id_env_destination')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table 'lier'
--

INSERT INTO 'lier' ('id_flux', 'id_env_ori', 'id_env_destination') VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 4, 4),
(5, 5, 5),
(6, 6, 6),
(7, 7, 7),
(8, 8, 8);

-- --------------------------------------------------------

--
-- Structure de la table 'possede'
--

CREATE TABLE IF NOT EXISTS 'possede' (
  'id_serv' int(11) NOT NULL AUTO_INCREMENT,
  'id_env_destination' int(11) NOT NULL,
  PRIMARY KEY ('id_serv','id_env_destination'),
  KEY 'FK_possede_id_env_destination' ('id_env_destination')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

--
-- Contenu de la table 'possede'
--

INSERT INTO 'possede' ('id_serv', 'id_env_destination') VALUES
(2, 1),
(5, 2),
(11, 3),
(12, 3),
(13, 3),
(14, 3),
(11, 4),
(12, 4),
(13, 4),
(14, 4),
(3, 5),
(3, 6),
(15, 7),
(16, 7),
(15, 8),
(16, 8);

-- --------------------------------------------------------

--
-- Structure de la table 'serveur'
--

CREATE TABLE IF NOT EXISTS 'serveur' (
  'id_serv' int(11) NOT NULL AUTO_INCREMENT,
  'nom_serv' text,
  'ip_serv' text,
  PRIMARY KEY ('id_serv')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

--
-- Contenu de la table 'serveur'
--

INSERT INTO 'serveur' ('id_serv', 'nom_serv', 'ip_serv') VALUES
(1, 'INTERNET\r\n', NULL),
(2, 'caracas\r\n', NULL),
(3, 'maiquetia\r\n', NULL),
(4, 'marcaibo\r\n', NULL),
(5, 'cabudare', NULL),
(11, 'SBSAIVXL005', NULL),
(12, 'SBSAIVXL006\r\n', NULL),
(13, 'SBSAIVXL007', NULL),
(14, 'SBSAIVXL008\r\n', NULL),
(15, 'SBSAIVRE001', NULL),
(16, 'SBSAIVRE002\r\n', NULL);

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table 'contient'
--
ALTER TABLE 'contient'
  ADD CONSTRAINT 'FK_contient_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux'),
  ADD CONSTRAINT 'FK_contient_id_appli' FOREIGN KEY ('id_appli') REFERENCES 'application' ('id_appli');

--
-- Contraintes pour la table 'correpond'
--
ALTER TABLE 'correpond'
  ADD CONSTRAINT 'FK_correpond_id_corres' FOREIGN KEY ('id_corres') REFERENCES 'correspondance' ('id_corres'),
  ADD CONSTRAINT 'FK_correpond_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux');

--
-- Contraintes pour la table 'est_connecte'
--
ALTER TABLE 'est_connecte'
  ADD CONSTRAINT 'FK_est_connecte_id_env_ori' FOREIGN KEY ('id_env_ori') REFERENCES 'env_origine' ('id_env_ori'),
  ADD CONSTRAINT 'FK_est_connecte_id_serv' FOREIGN KEY ('id_serv') REFERENCES 'serveur' ('id_serv');

--
-- Contraintes pour la table 'lier'
--
ALTER TABLE 'lier'
  ADD CONSTRAINT 'FK_lier_id_env_destination' FOREIGN KEY ('id_env_destination') REFERENCES 'env_destination' ('id_env_destination'),
  ADD CONSTRAINT 'FK_lier_id_env_ori' FOREIGN KEY ('id_env_ori') REFERENCES 'env_origine' ('id_env_ori'),
  ADD CONSTRAINT 'FK_lier_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux');

--
-- Contraintes pour la table 'possede'
--
ALTER TABLE 'possede'
  ADD CONSTRAINT 'FK_possede_id_env_destination' FOREIGN KEY ('id_env_destination') REFERENCES 'env_destination' ('id_env_destination'),
  ADD CONSTRAINT 'FK_possede_id_serv' FOREIGN KEY ('id_serv') REFERENCES 'serveur' ('id_serv');
0
wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
Salut,

J'avais oublier les noms des tables, quand on utilise les jointures avec delete, il faut préciser les noms des tables don't les lignes seront supprimés.
DELETE application,contient,flux, correpond, correspondance ,lier, env_origine, env_destination FROM application LEFT JOIN contient ON(application.id_appli=contient.id_appli) LEFT JOIN flux ON(contient.id_flux=flux.id_flux) LEFT JOIN correpond ON (flux.id_flux=correpond.id_flux) LEFT JOIN correspondance ON (correpond.id_corres=correspondance.id_corres) LEFT JOIN lier ON (flux.id_flux=lier.id_flux) LEFT JOIN env_origine ON (env_origine.id_env_ori=lier.id_env_ori) LEFT JOIN env_destination ON (lier.id_env_destination=env_destination.id_env_destination) WHERE application.id_appli = 1



Maintenant si t'exécute cette requête tu aura un message d'erreur genre (Cannot delete or update a parent row: a foreign key constraint fails ..) à cause des clés étrangères, tu doit ajouter la contrainte on delete cascade.

ALTER TABLE 'contient'
  ADD CONSTRAINT 'FK_contient_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux')  ON DELETE CASCADE ,
  ADD CONSTRAINT 'FK_contient_id_appli' FOREIGN KEY ('id_appli') REFERENCES 'application' ('id_appli')  ON DELETE CASCADE ;

--
-- Contraintes pour la table 'correpond'
--
ALTER TABLE 'correpond'
  ADD CONSTRAINT 'FK_correpond_id_corres' FOREIGN KEY ('id_corres') REFERENCES 'correspondance' ('id_corres')  ON DELETE CASCADE ,
  ADD CONSTRAINT 'FK_correpond_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux')  ON DELETE CASCADE ;

--
-- Contraintes pour la table 'est_connecte'
--
ALTER TABLE 'est_connecte'
  ADD CONSTRAINT 'FK_est_connecte_id_env_ori' FOREIGN KEY ('id_env_ori') REFERENCES 'env_origine' ('id_env_ori')  ON DELETE CASCADE ,
  ADD CONSTRAINT 'FK_est_connecte_id_serv' FOREIGN KEY ('id_serv') REFERENCES 'serveur' ('id_serv')  ON DELETE CASCADE);

--
-- Contraintes pour la table 'lier'
--
ALTER TABLE 'lier'
  ADD CONSTRAINT 'FK_lier_id_env_destination' FOREIGN KEY ('id_env_destination') REFERENCES 'env_destination' ('id_env_destination')  ON DELETE CASCADE ,
  ADD CONSTRAINT 'FK_lier_id_env_ori' FOREIGN KEY ('id_env_ori') REFERENCES 'env_origine' ('id_env_ori')  ON DELETE CASCADE  ,
  ADD CONSTRAINT 'FK_lier_id_flux' FOREIGN KEY ('id_flux') REFERENCES 'flux' ('id_flux')  ON DELETE CASCADE ;

--
-- Contraintes pour la table 'possede'
--
ALTER TABLE 'possede'
  ADD CONSTRAINT 'FK_possede_id_env_destination' FOREIGN KEY ('id_env_destination') REFERENCES 'env_destination' ('id_env_destination')  ON DELETE CASCADE ,
  ADD CONSTRAINT 'FK_possede_id_serv' FOREIGN KEY ('id_serv') REFERENCES 'serveur' ('id_serv')  ON DELETE CASCADE ;

0
Xeno
 
je suis rentré chez moi, j'essayerai donc demain mais en tout cas en lisant, jme dit que en cherchant un peu plus j'aurai peut être trouvé, m'enfin tu m'enlève une grosse épine du pied :)
merci @ toi
0
wolves'sbrother Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   35
 
J'ai tester la requête chez moi est ça marche, faut juste que t'ajoute la contrainte "on delete cascade" pour les clés étrangères.
Ravi d'avoir pu t'aider et si y a autre chose n'hésite pas.
0
Xeno
 
Re-Bonjour ^^

Bah écoute, j'ai essayer ce que tu m'as dit, cela ne marche pas, pourtant tout m'as l'air bien, mais j'ai cette erreur au moment de l'alter table pour ajouter le cascade :

#1005 - Ne peut créer la table 'db_carto.#sql-a54_37' (Errcode: 121) (<a href="server_engines.php?engine=InnoDB&page=Status&token=d97f31a0fc32768e1e02b331894a49c2">Détails...</a>)

voila donc je sais vraiment pas pourquoi j'ai un probleme alors que tu n'en as pas
0
Xeno
 
C'est bon j'ai fini par trouver ça marche je te remercie beaucoup et ou j'aurai surement encore besoin d'aide dans les jour a venir je pense :)

mais pour aujourd'hui bonne journée :)
0