Heim > Datenbank > MySQL-Tutorial > Warum führt das Löschen eines Jobdatensatzes zu einer „Verletzung der Fremdschlüsseleinschränkung'?

Warum führt das Löschen eines Jobdatensatzes zu einer „Verletzung der Fremdschlüsseleinschränkung'?

Linda Hamilton
Freigeben: 2025-01-14 16:27:48
Original
177 Leute haben es durchsucht

Why Does Deleting a Job Record Cause a

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage