Requete de suppression SQL (MySql) pour pro
Résolu
Xeno
-
Xeno123 Messages postés 132 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Requete de suppression SQL (MySql) pour pro
- Forcer suppression fichier - Guide
- Clé windows 10 pro 64 bits gratuit - Guide
- Cool edit pro - Télécharger - Édition & Montage
- Ccleaner pro gratuit - Télécharger - Optimisation
- Suppression compte gmail - Guide
10 réponses
Salut,
Essaye ça , normalement ça devrait marcher.
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
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 ...
#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 ...
Si tu veux je te file mon adresse mail et envoie moi ta base de données comme ça je pourrai corriger la requete.
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');
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.
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.
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 ;
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
merci @ toi
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.
Ravi d'avoir pu t'aider et si y a autre chose n'hésite pas.
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
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