2017-08-04 4 views
0

Ich habe eine MySQL-Datenbank. Ich möchte alle Übereinstimmungen löschen, in denen places.match_no > 26 und matches.chart_id = 106.MySQL löschen mit innerem Join, aber Fremdschlüssel-Constraint schlägt fehl

DELETE matches 
FROM kk_matches AS matches 
INNER JOIN places ON places.id = matches.place_id 
    AND places.match_no > 26 
WHERE matches.chart_id = 106 

Dies wird einen Fehler verursachen:

#1451 - Cannot delete or update a parent row: a foreign key constraint fails...

Was tun?

Antwort

1

In Ihrer Datenbank befindet sich eine weitere Tabelle mit einem Fremdschlüssel für die Tabelle kk_matches. Bevor Sie einen Datensatz in der Tabelle kk_matches löschen können, müssen Sie alle Datensätze in anderen Tabellen löschen, die auf diesen Datensatz in kk_matches zeigen. Anderenfalls würden Sie diese anderen Aufzeichnungen "verwaisen".

Fremdschlüssel sind ein Mittel, um diese Art von Operationen zu vermeiden, die dazu führen, dass Ihre Daten irrelevant werden.

1

Sie können keine Zeile löschen, die ein Feld enthält, auf das von einer Fremdschlüsseleinschränkung verwiesen wird. Sie müssen zuerst die referenzierende Zeile löschen und anschließend die gewünschte Zeile löschen (oder die Einschränkung löschen, falls dies nicht beabsichtigt war).

In dieser Anleitung für weitere Informationen:

https://www.w3schools.com/sql/sql_foreignkey.asp

3

What to do?

die erste abhängige Zeile untergeordneter Tabelle löschen und geht dann übergeordnete Tabellenzeile zum Löschen. Was Sie eigentlich tun sollten, ist CASCADE Option zu definieren, während Sie Ihre FOREIGN KEY Sprichwort ON DELETE CASCADE definieren.

Eine weitere Option ist ein BEFORE DELETE Auslöser haben und dort tun DELETE das Kind Tabellenzeilen

+0

Das Kind Tabelle hat 'ON NO ACTION' DELETE und das ist, was ich verwenden möchte. – xms

Verwandte Themen