Fehler: Verletzung der Fremdschlüsseleinschränkung – übergeordnete Zeilen werden gelöscht
Der Versuch, einen Jobdatensatz zu löschen (z. B. DELETE FROM jobs WHERE job_id = 1 LIMIT 1;
), führt zu Fehler Nr. 1451: „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl.“ Dies liegt daran, dass die advertisers
-Tabelle über einen Fremdschlüssel verfügt, der auf das jobs
.advertiser_id
der
Datenbankschema:
Die Datenbank enthält diese Tabellen:
advertisers
:
advertiser_id
(Primärschlüssel)name
, password
, email
, address
, phone
, fax
, session_token
advertisers_ibfk_1
Referenzierung jobs.advertiser_id
jobs
:
job_id
(Primärschlüssel)advertiser_id
(Fremdschlüssel)name
, shortdesc
, longdesc
, address
, time_added
, active
, moderated
Lösung: Fremdschlüsseleinschränkungen vorübergehend deaktivieren
Die Lösung besteht darin, Fremdschlüsselprüfungen vorübergehend zu deaktivieren, um das Löschen zu ermöglichen, und sie dann wieder zu aktivieren, um die Datenintegrität zu wahren:
<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1; -- Delete the problematic job record SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
Diese Methode ermöglicht das Löschen unter Beibehaltung der referenziellen Integrität der gesamten Datenbank. Denken Sie daran, die Auswirkungen der Deaktivierung von Fremdschlüsselprüfungen sorgfältig abzuwägen und diesen Ansatz nur zu verwenden, wenn dies unbedingt erforderlich ist.
Das obige ist der detaillierte Inhalt vonWarum kann ich einen Jobdatensatz nicht löschen: Verstoß gegen Fremdschlüsseleinschränkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!