Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2010, 17h04   #1
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Par défaut Requête DELETE imbriquée

Bonjour,

Je possède deux tables liées grâce à un id... je veux faire en sorte de supprimer tous les enregistrements sur les deux tables qui contiennent le même id... c'est-à-dire, je veux dire "Supprime moi tous les enregistrements de la table x et de la table y qui ont un id = 1"... est-ce possible de faire ceci avec une requête DELETE FROM imbriquée au lieu de écrire ligne par ligne ? comment le faire svp ?

Merci
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h14   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Quel est votre SGBDR ?

si vous avez une relation entre ces deux tables, peut être pouvez vous stipuler un "ON DELETE CASCADE"
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h26   #3
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Mon sgbd est mysql
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h34   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
avez-vous essayer d'ajouter le "ON DELETE CASCADE" votre contrainte

quelle est la structure de votre table, notamment quelles sont les contraintes definies ? (est-ce une relation 1---n ?)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h38   #5
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Oupss je ne connais pas trop sur MySQL y a pas de relation directe... je suis en train de lier les deux tables par des requêtes... en utilisant d'autres sgbd je peux dire que c'est une relation un à plusieurs...

J'ai jamais essayé "ON DELETE CASCADE"
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h44   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par spamitovic Voir le message
J'ai jamais essayé "ON DELETE CASCADE"
Il faut un début à tout...

sinon il vous reste une autre méthode :
deux requêtes DELETE dans une transaction
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h49   #7
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Citation:
Envoyé par aieeeuuuuu Voir le message
Il faut un debut a tout...
Eh oui c'est ce que je cherche maintenant, des exemples de ON DELETE CASCADE
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 18h15   #8
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Bon j'ai essayé ceci pour table parent :

Code :
1
2
3
4
5
6
 
CREATE  TABLE `profiles` (
  `refprofile` INTEGER NOT NULL AUTO_INCREMENT ,
  `profilename` TEXT,
  PRIMARY KEY (`refprofile`) )
ENGINE = toto;
table enfant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE  TABLE `profiles_details` (
  `refdetails` INTEGER NOT NULL AUTO_INCREMENT ,
  `refprofile` INTEGER,
  `rub` TEXT,
  `access` INTEGER,
  `adds` INTEGER,
  `edit` INTEGER,
  `del` INTEGER,
  PRIMARY KEY (`refdetails`) ,
  INDEX (`refprofile`) ,
  CONSTRAINT `refprofile`
    FOREIGN KEY ( `refprofile` )
    REFERENCES `profiles` (`refprofile` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = toto;
Mais quand je mets :

Code :
1
2
 
DELETE FROM profiles WHERE refprofile = 1
ça efface l'enregistrement 1 de la table "profiles" (c'est normal) mais pas les enregistrements liés de la table profiles_details qui contiennent 1 dans refprofile
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 18h23   #9
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 882
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 882
Points : 5 115
Points : 5 115
Vérifiez que le moteur n'est pas MyISAM mais InnoDB.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 18h29   #10
Membre régulier
 
Homme
Inscription : septembre 2009
Messages : 178
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Maroc

Informations forums :
Inscription : septembre 2009
Messages : 178
Points : 93
Points : 93
Envoyer un message via MSN à spamitovic Envoyer un message via Skype™ à spamitovic
Voilà je me suis trompé, j'ai mis le moteur InnoDB et ça a marché...

Merci bcp fsmrel et aieeeuuuuu
spamitovic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web