Dies ist ein häufiges Problem in der Verwaltung der relationalen Datenbank. Fremdschlüsseleinschränkungen sollen die Datenintegrität aufrechterhalten, indem die Referenzkonsistenz zwischen Tabellen sichergestellt wird. Wenn Sie versuchen, eine Zeile in einer übergeordneten Tabelle mit entsprechenden Zeilen in einer untergeordneten Tabelle zu löschen, in der sie über einen Fremdschlüssel verweist, verhindert die Datenbank normalerweise die Löschung und macht einen Fehler. Dies liegt daran, dass das Löschen der übergeordneten Zeile die untergeordneten Zeilen mit baumelnden Referenzen hinterlassen würde, die die Einschränkung verletzt und möglicherweise zu Datenverschädigungen oder Inkonsistenzen führt. Der einfachste und am meisten empfohlene Ansatz besteht darin, zuerst die damit verbundenen Zeilen in der untergeordneten Tabelle (n) zu löschen, bevor die Zeile in der übergeordneten Tabelle gelöscht wird. Wenn Sie versuchen, einen Kunden zu löschen, der Bestellungen erteilt hat, verhindert die Datenbank die Löschung. Der korrekte Ansatz besteht darin, zuerst alle mit diesem Kunden verbundenen Bestellungen aus der Tabelle
zu löschen und den Kunden nur aus der Tabelle zu löschen. Dies kann unter Verwendung der folgenden SQL -Anweisungen erreicht werden (vorausgesetzt, Ihr Datenbanksystem unterstützt die Kaskadierung von Deletten - siehe unten für Alternativen): Customers
Orders
Orders.CustomerID
Customers.CustomerID
durch die tatsächliche Kunden -ID ersetzt. mit einem vollständigen Verständnis der potenziellen Risiken. Die direkte Umgehung dieser Einschränkungen kann zu Datenkonsistenzen und Korruption führen. Die Methoden zur Umkehrung hängen von Ihrem spezifischen Datenbanksystem ab. Orders
ALTER TABLE ... DISABLE CONSTRAINT
in einigen Systemen). Dies minimiert das Risiko, die Datenbank in einem inkonsistenten Zustand zu verlassen. Dies bypass ON DELETE CASCADE
): Wie oben erläutert, ist dies gegebenenfalls der bevorzugte Ansatz für Ihr Datenmodell. Es löscht automatisch verwandte untergeordnete Zeilen. Es verhindert das Löschen einer übergeordneten Zeile, wenn es verwandte Kinderreihen gibt. Dies erzwingt die referenzielle Integrität, erfordert jedoch eine manuelle Reinigung der zugehörigen Zeilen in untergeordneten Tabellen, bevor übergeordnete Zeilen gelöscht werden. Dies ist nur geeignet, wenn Das obige ist der detaillierte Inhalt vonSo behandeln Sie fremde Schlüsselbeschränkungen in SQL -Zeilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!