Requete de suppression SQL (MySql) pour pro

Résolu/Fermé
Xeno - Modifié par Xeno le 14/06/2011 à 14:40
Xeno123 Messages postés 132 Date d'inscription vendredi 11 septembre 2009 Statut Membre Dernière intervention 10 juillet 2012 - 16 juin 2011 à 10:51
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


10 réponses

wolves'sbrother Messages postés 218 Date d'inscription samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
14 juin 2011 à 15:01
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 samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
15 juin 2011 à 09:51
c'est quand tu veux , y a pas de soucis.
bonne journée
1
Xeno123 Messages postés 132 Date d'inscription vendredi 11 septembre 2009 Statut Membre Dernière intervention 10 juillet 2012 23
16 juin 2011 à 08:35
je t'ai envoyer un MP si tu as le temps de le regarder :)
0
wolves'sbrother Messages postés 218 Date d'inscription samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
16 juin 2011 à 10:28
Je vais regarder ça tout de suite
0
Xeno123 Messages postés 132 Date d'inscription vendredi 11 septembre 2009 Statut Membre Dernière intervention 10 juillet 2012 23
16 juin 2011 à 10:51
merci :) une fois de plus tu me sauveras la vie (bon c'est exagérer mais tu me dépanneras bien ^^)
0
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 samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
14 juin 2011 à 15:09
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
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 samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
14 juin 2011 à 17:57
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
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 samedi 7 février 2009 Statut Membre Dernière intervention 13 juillet 2011 31
14 juin 2011 à 18:09
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
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
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