J'ai une contrainte de clé étrangère dans ma table, je veux y ajouter ON DELETE CASCADE.
J'ai essayé ceci:
alter table nom_table_enfant modifier la contrainte fk_name clé étrangère (child_column_name) référence nom_table_parent (nom_colonne_parent) lors de la suppression en cascade;
Ça ne marche pas.
EDIT:
la clé étrangère existe déjà, il y a des données dans la colonne de clé étrangère.
Le message d'erreur que je reçois après l'exécution de l'instruction:
ORA-02275: une telle contrainte référentielle existe déjà dans le tableau
Réponses:
Vous ne pouvez pas ajouter
ON DELETE CASCADE
à une contrainte déjà existante. Vous devrezdrop
et refairecreate
la contrainte. La documentation montre que laMODIFY CONSTRAINT
clause ne peut modifier que l' état d'une contrainte (ie:ENABLED/DISABLED
...).la source
D'abord
drop
votre clé étrangère et essayez votre commande ci-dessus, mettez à laadd constraint
place demodify constraint
. Voici maintenant la commande:la source
Ce PL * SQL écrira dans DBMS_OUTPUT un script qui supprimera chaque contrainte qui n'a pas de cascade de suppression et la recréera avec une cascade de suppression.
REMARQUE: l'exécution de la sortie de ce script est À VOS PROPRES RISQUES. Il est préférable de lire le script résultant et de le modifier avant de l'exécuter.
la source
Comme expliqué précédemment:
Comme vous pouvez le voir, ces commandes doivent être séparées, d'abord en les déposant puis en les ajoutant.
la source
go
avec le point-virgule comme dans postgres et SqlServer lui-même. Mais les codes de base restants sont standard sql. Test avec des points-virgules, je viens de le changer[
ou ne]
sont pas valides dans SQL standard (et Oracle). Oracle ne prend pas non plus en charge laon update
clause pour une clé étrangère.[
]
sont spécifiques à SqlServer. Je vais le nettoyer davantage. À propos deon update
je ne peux rien dire.Réponse pour les UTILISATEURS MYSQL:
la source
Pour toute personne utilisant MySQL:
Si vous accédez à votre
PHPMYADMIN
page Web et accédez à la table contenant la clé étrangère que vous souhaitez mettre à jour, tout ce que vous avez à faire est de cliquerRelational view
sur l'Structure
onglet situé dans l' onglet et de modifier l'On delete
option de menu de sélection enCascade
.Image ci-dessous:
la source
Voici une solution pratique! J'utilise SQL Server 2008 R2.
Comme vous souhaitez modifier la contrainte FK en ajoutant ON DELETE / UPDATE CASCADE, procédez comme suit:
NUMÉRO 1:
Faites un clic droit sur la contrainte et cliquez pour modifier
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 le point " INSERT And UPDATE Specification " et spécifiez les actions sur la ligne Supprimer la règle ou Mettre à jour la règle en fonction de vos besoins. Après cela, fermez la boîte de dialogue.
NUMÉRO 3:
La dernière étape consiste à enregistrer ces modifications (bien sûr!)
PS: Cela m'a sauvé d'un tas de travail car je veux modifier une clé primaire référencée dans une autre table.
la source
Si vous souhaitez modifier une clé étrangère sans la laisser tomber, vous pouvez faire:
la source
la source