Sie müssen sich das Schlüsselwort "on delete" ansehen, das Teil der Fremdschlüssel-Einschränkungsdefinition ist. Grundsätzlich haben Sie 4 Optionen:
- keine Wirkung (tut nichts)
- CASCADE (löscht das Kind aswell)
- NULL SET (setzt das Referenzfeld auf null)
- SET DEFAULT (setzt die Referenzfeld auf den Standardwert)
Ein Beispiel wäre:
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE -- replace CASCADE with your choice
) ENGINE=INNODB;
(für dieses Beispiel und weitere Informationen hier: http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)
Wenn Sie jetzt ändern, um Ihre Constraint wollen, müssen Sie zuerst fallen lassen müssen, und eine neue erstellen, wie zum Beispiel:
ALTER TABLE child
ADD CONSTRAINT fk_name
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE; -- replace CASCADE with your choice
Ich hoffe das hat geholfen. Außerdem sollten Sie darüber nachdenken, Ihre Eltern nicht wirklich zu löschen und stattdessen eine andere boolesche Spalte "deleted" zu erstellen, die Sie mit "yes" füllen, wenn jemand auf delete klickt. In der "Select" -Abfrage filtern Sie dann nach dieser "gelöschten" Spalte. Der Vorteil ist, dass Sie den Verlauf dieses Eintrags nicht verlieren.
Bitte einige Codes anzeigen. Vielleicht kann ich Dir helfen. – Francisunoxx