Verstoß gegen Fremdschlüsseleinschränkungen: „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden“
Das Löschen eines Auftragsdatensatzes kann den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl“ (#1451) auslösen. Dies geschieht aufgrund einer Fremdschlüsselbeziehung zwischen den Tabellen jobs
und advertisers
.
Fremdschlüsseleinschränkungen verstehen
Eine Fremdschlüsseleinschränkung stellt die referenzielle Integrität sicher. Die jobs
-Spalte der advertiser_id
-Tabelle muss immer mit einem gültigen advertiser_id
in der advertisers
-Tabelle übereinstimmen. Dies verhindert verwaiste Datensätze. Der Fehler tritt auf, wenn ein Jobdatensatz mit Werbetreibenden verknüpft ist und beim Löschen des Jobs fehlende Referenzen zurückbleiben würden.
Lösungen
1. Fremdschlüsselprüfungen vorübergehend deaktivieren:
Die schnellste Lösung besteht darin, Fremdschlüsselprüfungen vorübergehend zu deaktivieren, den Job zu löschen und sie dann wieder zu aktivieren:
<code class="language-sql">SET FOREIGN_KEY_CHECKS=0; DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1; SET FOREIGN_KEY_CHECKS=1;</code>
Diese Methode umgeht die Einschränkung, ist jedoch wichtig, um Prüfungen auf Datenintegrität später wieder zu aktivieren.
2. Kaskadierende Löschvorgänge implementieren:
Eine robustere Lösung besteht darin, die Fremdschlüsseleinschränkung so zu ändern, dass kaskadierende Löschvorgänge verwendet werden. Dadurch werden zugehörige Werbetreibendendatensätze automatisch gelöscht, wenn ein Job entfernt wird:
<code class="language-sql">ALTER TABLE `advertisers` ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`) ON DELETE CASCADE;</code>
Kaskadierende Löschvorgänge sorgen für die Datenkonsistenz, ohne dass eine vorübergehende Deaktivierung der Einschränkung erforderlich ist. Wählen Sie diesen Ansatz für ein saubereres, besser wartbares Datenbankdesign.
Das obige ist der detaillierte Inhalt vonWarum führt das Löschen eines Jobdatensatzes zu einer „Verletzung der Fremdschlüsseleinschränkung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!