A voir également:
- Sql delete cascade
- Delete cascade - Meilleures réponses
- On delete cascade - Meilleures réponses
- [SQL] Faire une suppresion en cascade - Forum - Programmation
- [ SQL ] Commande DELETE... CASCADE ✓ - Forum - Programmation
- Delete en cascade ✓ - Forum - Programmation
- Mysql DELETE CASCADE ✓ - Forum - MySQL
- [SQL] Suppression en "cascade" - Forum - Bases de données
13 réponses
Utilisateur anonyme
Arf donc si je peux t'expliquer rapidement en essayant de coller à ton cas... En fait il faut que tes tables puissent communiquer pour que la base de donnée puisse savoir ce qu'elle doit supprimer, moi je ferais :
CREATE TABLE SECTEUR
(
NUMSECTEUR INTEGER NOT NULL,
NOMSECTEUR VARCHAR(50) ,
PRIMARY KEY (NUMSECTEUR)
);
CREATE TABLE MACHINE
(
NUMMACHINE INTEGER NOT NULL,
NOMMACHINE VARCHAR(50) ,
NUMSECTEUR INTEGER NOT NULL,
PRIMARY KEY (NUMMACHINE),
ADD CONSTRAINT FK_secteur FOREIGN KEY NUMSECTEUR REFERENCES SECTEUR(NUMSECTEUR) ON DELETE CASCADE
);
CREATE TABLE PROBLEME
(
NUMPROBLEME INTEGER NOT NULL,
NUMMACHINE INTEGER NOT NULL,
DATEPROBLEME VARCHAR(50) ,
DESCRIPTION VARCHAR(500) ,
PRIMARY KEY (NUMPROBLEME),
ADD CONSTRAINT FK_machines FOREIGN KEY NUMSECTEUR REFERENCES MACHINE(NUMMACHINE) ON DELETE CASCADE
);
Après les index je me souviens plus, pour ça que j'ai supprimé, mais faut pas que tu les supprime hein! Mais en liant ainsi tes tables et en demandant un delete en cascade, la base de données saura quoi supprimer. J'ai sans doutes oublié des virgules, mais je suis sure que tu te débrouilleras, j'ai une flemme monumentale je relire tout ça...
CREATE TABLE SECTEUR
(
NUMSECTEUR INTEGER NOT NULL,
NOMSECTEUR VARCHAR(50) ,
PRIMARY KEY (NUMSECTEUR)
);
CREATE TABLE MACHINE
(
NUMMACHINE INTEGER NOT NULL,
NOMMACHINE VARCHAR(50) ,
NUMSECTEUR INTEGER NOT NULL,
PRIMARY KEY (NUMMACHINE),
ADD CONSTRAINT FK_secteur FOREIGN KEY NUMSECTEUR REFERENCES SECTEUR(NUMSECTEUR) ON DELETE CASCADE
);
CREATE TABLE PROBLEME
(
NUMPROBLEME INTEGER NOT NULL,
NUMMACHINE INTEGER NOT NULL,
DATEPROBLEME VARCHAR(50) ,
DESCRIPTION VARCHAR(500) ,
PRIMARY KEY (NUMPROBLEME),
ADD CONSTRAINT FK_machines FOREIGN KEY NUMSECTEUR REFERENCES MACHINE(NUMMACHINE) ON DELETE CASCADE
);
Après les index je me souviens plus, pour ça que j'ai supprimé, mais faut pas que tu les supprime hein! Mais en liant ainsi tes tables et en demandant un delete en cascade, la base de données saura quoi supprimer. J'ai sans doutes oublié des virgules, mais je suis sure que tu te débrouilleras, j'ai une flemme monumentale je relire tout ça...
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
Si je pouvais avoir un simple exemple de ce qu'il faudrait faire je vous serais reconnaissant
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
Bon après plusieurs recherches j'ai décidé d'utiliser ceci (merci cyber liz) :
La syntaxe pour ajouter ta contrainte si tu n'en a pas:
ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) ON DELETE CASCADE
cependant je ne sais pas trop l'utiliser ...
qu'est ce que "symbol" ????
La syntaxe pour ajouter ta contrainte si tu n'en a pas:
ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) ON DELETE CASCADE
cependant je ne sais pas trop l'utiliser ...
qu'est ce que "symbol" ????
Utilisateur anonyme
Salut!
je vois que tu n'as pas de réponse, je ne suis pas une pro en sql, je ne pratique que depuis un an. Pour un delete en cascade cette fonction est bien la bonne. la partie "symbol" entre crochets ne me dit rien, je ne crois pas l'avoir déjà utilisée. Essaie sans...
Cette fonctions tu l'ajoutes dans ta creation de table, à la fin, après avoir crée la table qui contient la clé primaire évidemment. Tu sais comment ça marche les clés primaires et étrangères?
je vois que tu n'as pas de réponse, je ne suis pas une pro en sql, je ne pratique que depuis un an. Pour un delete en cascade cette fonction est bien la bonne. la partie "symbol" entre crochets ne me dit rien, je ne crois pas l'avoir déjà utilisée. Essaie sans...
Cette fonctions tu l'ajoutes dans ta creation de table, à la fin, après avoir crée la table qui contient la clé primaire évidemment. Tu sais comment ça marche les clés primaires et étrangères?
Utilisateur anonyme
Ah si en fait je sait à quoi ça corespond, autant pour moi... "symbol" est un nom que tu vas donner à ta contrainte afin de pouvoir la retrouver et l'enlever si tu le désires. par exemple tu peux mettre suppression-cascade. Mets un nom assez significatif afin de pouvoir la retrouver de tête. Il y a une convention pour ces noms, si je le retrouve je te le dirai...
Une syntaxe peut être plus communicative pour toi : ADD CONSTRAINT nom_contrainte FOREIGN KEY(champs_fils,...) REFERENCES nom_table_parent (champ_parents) ON DELETE CASCADE
Une syntaxe peut être plus communicative pour toi : ADD CONSTRAINT nom_contrainte FOREIGN KEY(champs_fils,...) REFERENCES nom_table_parent (champ_parents) ON DELETE CASCADE
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
oui disons que je saurais rajouter une clé primaire manuellement allant de ma table secteur a ma table machine par exemple alter table SECTEUR add primary key (NOMSECTEUR)
mais je t'avoue qu'ajouter la contrainte qui fait qu'a chaque suppression de secteur tous ce qui est rattaché a ce secteur uniquement soit supprimer la ça me pose un gros problème ..
En tout cas je te remercie de répondre je commençais a croire que les gens allaient laisser couler ...
mais je t'avoue qu'ajouter la contrainte qui fait qu'a chaque suppression de secteur tous ce qui est rattaché a ce secteur uniquement soit supprimer la ça me pose un gros problème ..
En tout cas je te remercie de répondre je commençais a croire que les gens allaient laisser couler ...
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
je te remercie, je vais essayer ce que tu viens de me dire ^^
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
alter table MACHINE add constraint supcascade foreign key(NUMSECTEUR) REFERENCES SECTEUR(NUMSECTEUR)
syntaxiquement ceci est très juste, pense tu que j'aurais le résultat souhaité ?
j'essaie ceci dans 5 minutes
Ah oui et pense tu que lorsque je fait ceci ça me supprimera également les références dans problème ou il fraudais que je refasse une autre contrainte cascade ?
je m'explique d'après mes tables un problème dépend d'une machine et une machine dépend d'un secteur.
je voudrais que lorsque je supprime ce secteur cela me supprime et les machines qui en dépendent et les problèmes qui dépendent des machines dépendant des secteurs .... j'espère que je m'exprime correctement.
syntaxiquement ceci est très juste, pense tu que j'aurais le résultat souhaité ?
j'essaie ceci dans 5 minutes
Ah oui et pense tu que lorsque je fait ceci ça me supprimera également les références dans problème ou il fraudais que je refasse une autre contrainte cascade ?
je m'explique d'après mes tables un problème dépend d'une machine et une machine dépend d'un secteur.
je voudrais que lorsque je supprime ce secteur cela me supprime et les machines qui en dépendent et les problèmes qui dépendent des machines dépendant des secteurs .... j'espère que je m'exprime correctement.
Utilisateur anonyme
Il faut que tu rajoutes des champs comme tu as pu le voir! Je te conseille de tout supprimer et de tout refaire proprement, en créant tes tables comme je l'ai mis, en une seule requête, c'est peut être décourageant, mais tu auras plus de chances de ne pas avoir d'erreurs... Et donc les noms de contraintes, pour les clés étrangères, c'est "fk_" devant pour indiquer qu'il s'agit d'une FOREIGN KEY. Et oui en effet il faut une clé étrangère dans chaque table, sinon tes tables ne communiquent pas entre elles!
Et si tu fais comme je l'ai écrit ça devrait marcher pour les suppression en cascade ;) : avec le on delete cascade quand tu vas supprimer une valeur de secteur, la correspondance dans la table machine ne va plus exister et le base de donnée va donc supprimer les valeurs correspondantes, ainsi dans la table problème elle ne va plus trouver la clé étrangère et va supprimer les valeurs correspondantes. Mais il ne faut pas oublier le "on delete cascade".
je suis une cruche pour expliquer, j'espère que tu comprends quand même...
Et si tu fais comme je l'ai écrit ça devrait marcher pour les suppression en cascade ;) : avec le on delete cascade quand tu vas supprimer une valeur de secteur, la correspondance dans la table machine ne va plus exister et le base de donnée va donc supprimer les valeurs correspondantes, ainsi dans la table problème elle ne va plus trouver la clé étrangère et va supprimer les valeurs correspondantes. Mais il ne faut pas oublier le "on delete cascade".
je suis une cruche pour expliquer, j'espère que tu comprends quand même...
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
désolé du temps de réponse, repas oblige, oui effectivement j'ai essayer de modifier ça marchait syntaxiquement mais pas dans la fonctionnalité, donc je vais tous supprimer et refaire, je te tient au courant d'ici une demi heure ^^
Utilisateur anonyme
Je ne pourrais peut être pas répondre avant dimanche, j'espère que tu trouveras la solution! Mais tiens-moi au courant des fois que je puisse passer...
kawa67
- Messages postés
- 46
- Date d'inscription
- lundi 19 mai 2008
- Statut
- Membre
- Dernière intervention
- 2 juin 2009
Après une nuit de bagarre avec ma BDD ça marche !!!!!!! mais j'ai dut modifier quelque peu le script de génération des table qui est :
CREATE TABLE SECTEUR
(
NUMSECTEUR INTEGER NOT NULL,
NOMSECTEUR VARCHAR(50) ,
constraint PK_SECTEUR PRIMARY KEY(NUMSECTEUR)
);
CREATE TABLE MACHINE
(
NUMMACHINE INTEGER NOT NULL,
NOMMACHINE VARCHAR(50) ,
NUMSECTEUR INTEGER NOT NULL,
constraint PK_MACHINE PRIMARY KEY (NUMMACHINE),
constraint FK_SECTEUR FOREIGN KEY (NUMSECTEUR) REFERENCES SECTEUR(NUMSECTEUR) on delete cascade
);
CREATE TABLE PROBLEME
(
NUMPROBLEME INTEGER NOT NULL,
NUMMACHINE INTEGER NOT NULL,
DATEPROBLEME VARCHAR(50) ,
DESCRIPTION VARCHAR(500) ,
constraint PK_PROBLEME PRIMARY KEY (NUMPROBLEME),
constraint FK_MACHINE FOREIGN KEY (NUMMACHINE) REFERENCES MACHINE(NUMMACHINE) on delete cascade
);
En tout cas je te remercie drackenshtein !!!!!!
CREATE TABLE SECTEUR
(
NUMSECTEUR INTEGER NOT NULL,
NOMSECTEUR VARCHAR(50) ,
constraint PK_SECTEUR PRIMARY KEY(NUMSECTEUR)
);
CREATE TABLE MACHINE
(
NUMMACHINE INTEGER NOT NULL,
NOMMACHINE VARCHAR(50) ,
NUMSECTEUR INTEGER NOT NULL,
constraint PK_MACHINE PRIMARY KEY (NUMMACHINE),
constraint FK_SECTEUR FOREIGN KEY (NUMSECTEUR) REFERENCES SECTEUR(NUMSECTEUR) on delete cascade
);
CREATE TABLE PROBLEME
(
NUMPROBLEME INTEGER NOT NULL,
NUMMACHINE INTEGER NOT NULL,
DATEPROBLEME VARCHAR(50) ,
DESCRIPTION VARCHAR(500) ,
constraint PK_PROBLEME PRIMARY KEY (NUMPROBLEME),
constraint FK_MACHINE FOREIGN KEY (NUMMACHINE) REFERENCES MACHINE(NUMMACHINE) on delete cascade
);
En tout cas je te remercie drackenshtein !!!!!!