Ich habe eine Fremdschlüsseleinschränkung in meiner Tabelle. Ich möchte ON DELETE CASCADE hinzufügen.
Ich habe das versucht:
Ändern Sie die Tabelle child_table_name Ändern Sie die Einschränkung fk_name Fremdschlüssel (child_column_name) verweist bei der Löschkaskade auf parent_table_name (parent_column_name);
Funktioniert nicht
BEARBEITEN:
Fremdschlüssel existiert bereits, es befinden sich Daten in der Fremdschlüsselspalte.
Die Fehlermeldung, die ich nach dem Ausführen der Anweisung erhalte:
ORA-02275: Eine solche referenzielle Einschränkung ist bereits in der Tabelle vorhanden
Antworten:
Sie können
ON DELETE CASCADE
einer bereits vorhandenen Einschränkung keine hinzufügen . Sie habendrop
und re-create
die Einschränkung. Die Dokumentation zeigt, dass dieMODIFY CONSTRAINT
Klausel nur den Status einer Einschränkung ändern kann (dh:ENABLED/DISABLED
...).quelle
Zuerst
drop
Ihre Fremdschlüssel und versuchen Sie obigen Befehl setzenadd constraint
stattmodify constraint
. Dies ist der Befehl:quelle
Dieses PL * SQL schreibt in DBMS_OUTPUT ein Skript, das jede Einschränkung ohne Löschkaskade löscht und mit Löschkaskade neu erstellt.
HINWEIS: Die Ausführung der Ausgabe dieses Skripts erfolgt auf EIGENES RISIKO. Lesen Sie das resultierende Skript am besten durch und bearbeiten Sie es, bevor Sie es ausführen.
quelle
Wie zuvor erklärt:
Wie Sie sehen, müssen diese Befehle getrennt werden, zuerst gelöscht und dann hinzugefügt werden.
quelle
go
mit Semikolon wie in Postgres und SqlServer selbst zufällig. Die verbleibenden Kerncodes sind jedoch SQL-Standard. Test mit Semikolons, ich habe es gerade geändert[
oder]
sind in Standard-SQL (und Oracle) ungültig. Oracle unterstützt auch keineon update
Klausel für einen Fremdschlüssel.[
]
sind SqlServer-spezifisch. Ich werde es mehr ausräumen. Überon update
kann ich nichts sagen.Antwort für MYSQL-BENUTZER:
quelle
Für alle, die MySQL verwenden:
Wenn Sie auf Ihre
PHPMYADMIN
Webseite gehen und zu der Tabelle mit dem Fremdschlüssel navigieren, den Sie aktualisieren möchten, müssen Sie nur aufRelational view
dieStructure
Registerkarte klicken und dieOn delete
Auswahlmenüoption in ändernCascade
.Bild unten gezeigt:
quelle
Hier ist eine praktische Lösung! Ich verwende SQL Server 2008 R2.
Gehen Sie folgendermaßen vor, um die FK-Einschränkung durch Hinzufügen von ON DELETE / UPDATE CASCADE zu ändern:
NUMMER 1:
Klicken Sie mit der rechten Maustaste auf die Einschränkung und klicken Sie auf Ändern
NUMMER 2:
Wählen Sie Ihre Einschränkung auf der linken Seite (wenn es mehr als eine gibt). Reduzieren Sie dann auf der rechten Seite den Punkt " INSERT And UPDATE Specification " und fügen Sie die Aktionen in der Zeile "Regel löschen" oder "Regel aktualisieren" entsprechend Ihren Anforderungen ein. Schließen Sie danach das Dialogfeld.
NUMMER 3:
Der letzte Schritt ist das Speichern dieser Änderungen (natürlich!)
PS: Es hat mich vor einer Menge Arbeit bewahrt, da ich einen Primärschlüssel ändern möchte, auf den in einer anderen Tabelle verwiesen wird.
quelle
Wenn Sie einen Fremdschlüssel ändern möchten, ohne ihn fallen zu lassen, haben Sie folgende Möglichkeiten:
quelle
quelle