176 votes

Comment ajouter 'ON DELETE CASCADE' dans l'instruction ALTER TABLE ?

J'ai une contrainte de clé étrangère dans ma table, je veux y ajouter ON DELETE CASCADE.

J'ai essayé :

alter table child\_table\_name
  modify constraint fk\_name
  foreign key (child\_column\_name)
  references parent\_table\_name (parent\_column\_name) on delete cascade;

Ça ne marche pas.

EDITAR:
La clé étrangère existe déjà, il y a des données dans la colonne de la clé étrangère.

Le message d'erreur que je reçois après avoir exécuté la déclaration :

ORA-02275: such a referential constraint already exists in the table

0 votes

Quel est le problème ? La déclaration est rejetée, la suppression n'a pas lieu

6voto

James111 Points 948

Pour tous ceux qui utilisent MySQL :

Si vous allez dans votre PHPMYADMIN et naviguez jusqu'à la table qui contient la clé étrangère que vous voulez mettre à jour, tout ce que vous avez à faire est de cliquer sur le bouton Relational view situé dans le Structure et modifiez l'onglet On delete sélectionner l'option de menu pour Cascade .

Image montrée ci-dessous :

enter image description here

0 votes

OP est de 2009, sa question Oracle étiqueté, et PHPMYADMIN est un composant logiciel tiers pour MySQL.

8 votes

Tout à fait vrai. Mais j'ai cherché cette question sur Google, voulant savoir comment faire cela en MySQL, et Google m'a amené ici. Oui, la question est associée à Oracle, donc cette réponse n'est pas correcte... mais elle sera utile aux lecteurs qui, comme moi, tombent sur cette réponse. Ainsi, il fait ajouter de la valeur à cette page, même si elle n'est pas spécifique à l'Oracle. Donc, merci James111 !

0 votes

En outre, un bonus pour cette méthode est que PHPMYADMIN fait le travail difficile. Vous n'avez pas à supprimer la contrainte au préalable. Assurez-vous que la table est INNODB.

6voto

Serge Kishiko Points 184

Voici une solution pratique ! J'utilise SQL Server 2008 R2.

Comme vous voulez modifier la contrainte FK en ajoutant ON DELETE/UPDATE CASCADE, suivez ces étapes :

NUMÉRO 1 :

Cliquez à droite sur la contrainte et cliquez sur Modifier

enter image description here

NUMÉRO 2 :

Choisissez votre contrainte sur le côté gauche (s'il y en a plusieurs). Ensuite, sur le côté droit, réduisez " Spécification d'INSERT et UPDATE "et spécifiez les actions sur la ligne Supprimer la règle ou Mettre à jour la règle en fonction de vos besoins. Ensuite, fermez la boîte de dialogue.

enter image description here

NUMÉRO 3 :

L'étape finale consiste à sauvegarder ces modifications (bien sûr !).

enter image description here

PS : Cela m'a évité un tas de travail car je veux modifier une clé primaire référencée dans une autre table.

0 votes

Parfait, exactement ce dont j'avais besoin aussi !

0 votes

De rien @Wildview. C'est un plaisir de vous aider.

4voto

RedPelle Points 205

Si vous souhaitez modifier une clé étrangère sans la supprimer, vous pouvez le faire :

ALTER TABLE child_table_name  WITH CHECK ADD FOREIGN KEY(child_column_name)
REFERENCES parent_table_name (parent_column_name) ON DELETE CASCADE

0 votes

Bonne solution, mais notez que vous ajoutez ici une autre clé étrangère

0voto

ALTER TABLE `tbl_celebrity_rows` ADD CONSTRAINT `tbl_celebrity_rows_ibfk_1` FOREIGN KEY (`celebrity_id`) 
REFERENCES `tbl_celebrities`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

-2voto

Thorsten Points 4986

Juste quelques suppositions basées sur les informations que vous avez données :

  • La contrainte de clé étrangère existe-t-elle ?
  • Des fautes de frappe dans les noms de tables et/ou de colonnes ?

Veuillez donner les déclarations complètes de la table et les définitions des clés étrangères, la déclaration générale que vous avez donnée semble correcte ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X