Verstoß gegen Fremdschlüsseleinschränkungen: Löschen oder Aktualisieren übergeordneter Zeilen
Der Versuch, einen Datensatz aus der jobs
-Tabelle (der übergeordneten Tabelle) zu löschen, führt zu einem Fehler bei der Verletzung der Fremdschlüsseleinschränkung. Die Fehlermeldung verweist auf die Tabelle advertisers
, insbesondere auf die Einschränkung advertisers_ibfk_1
, die advertisers.advertiser_id
mit jobs.advertiser_id
verknüpft. Diese Abhängigkeit verhindert das Löschen oder Ändern der übergeordneten Zeile.
Die Ursache liegt im Datenbankschema:
<code class="language-sql">CREATE TABLE `advertisers` ( `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT, ... PRIMARY KEY (`advertiser_id`), FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`) ); CREATE TABLE `jobs` ( `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `advertiser_id` int(11) unsigned NOT NULL, ... PRIMARY KEY (`job_id`) );</code>
Die Fremdschlüsseleinschränkung in der advertisers
-Tabelle schreibt vor, dass jedes advertiser_id
einen entsprechenden Eintrag in der jobs
-Tabelle haben muss. Wenn ein Job (z. B. job_id
= 1) mit einem Werbetreibenden (advertiser_id
= 1) verknüpft ist, bleibt beim Löschen des Jobs das advertiser_id
in der advertisers
-Tabelle verwaist, wodurch die Einschränkung verletzt wird. Die Datenbank blockiert diese Aktion, um die Datenintegrität aufrechtzuerhalten.
Behebung des Einschränkungsverstoßes
Eine Problemumgehung besteht darin, Fremdschlüsselprüfungen vorübergehend zu deaktivieren:
<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1; SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
Dadurch wird die Durchsetzung von Einschränkungen umgangen und das Löschen ermöglicht. Entscheidend ist, dass die Überprüfungen anschließend wieder aktiviert werden, um die Datenbankintegrität wiederherzustellen. Dies ist jedoch eine vorübergehende Lösung. Ein robusterer Ansatz würde das Kaskadieren von Löschvorgängen (ON DELETE CASCADE) oder die ordnungsgemäße Verwaltung der zugehörigen Daten in der advertisers
-Tabelle vor dem Löschen aus jobs
umfassen.
Das obige ist der detaillierte Inhalt vonWarum kann ich eine übergeordnete Zeile aufgrund einer Verletzung der Fremdschlüsseleinschränkung nicht löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!