Kaskade Auslöst, die in SQLite
Ich habe folgende DB-Struktur in SQLite:
Möchte ich einen trigger erstellen, immer wenn ich löschen ein Land alle zugehörigen Landkreise, Gemeinden und Pfarreien werden auch gelöscht (wie MySQL mit InnoDB), ich habe versucht, mit dem SQLite-Trigger und kam mit dieser:
Bezirke:
CREATE TRIGGER [delete_country]
BEFORE DELETE
ON [countries]
FOR EACH ROW
BEGIN
DELETE FROM districts WHERE districts.id_countries = id;
END
Gemeinden:
CREATE TRIGGER [delete_district]
BEFORE DELETE
ON [districts]
FOR EACH ROW
BEGIN
DELETE FROM municipalities WHERE municipalities.id_districts = id;
END
Pfarreien:
CREATE TRIGGER [delete_municipality]
BEFORE DELETE
ON [municipalities]
FOR EACH ROW
BEGIN
DELETE FROM parishes WHERE parishes.id_municipalities = id;
END
Ich noch nicht getestet, die delete_district
und delete_municipality
- Trigger, da bekomme ich ein eigenartiges Verhalten an den delete_country
trigger: beim löschen einer Land nur die erste bezieht district wird gelöscht, alle anderen zugehörigen Bezirken in der Tabelle bleiben. Was mache ich falsch?
- Was hast du zum erstellen der Grafiken?
- ondras.zarovi.cz/sql
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den trigger wie es aussieht, ist das löschen Bezirke, deren id gleich id_countries, ist, dass die where-Klausel ist eigentlich
Müssen Sie die Referenz-id aus der Länder-Tabelle. In einen delete-trigger, die "alte", dies zu tun.
Außerdem würde ich vorschlagen, ändern Ihr schema naming convention. In der Regel, der name der Tabelle steht in der Einzahl, und entspricht der Entität in einer Reihe. Ich hätte eine country-Tabelle mit den Spalten id und name, ein Stadtteil Tabelle mit id, country_id, Vorname und name, etc.
Dann der Auslöser wäre
Damit wird die Durchsetzung von Fremdschlüssel wie in MySQL. Wenn Sie definieren Sie Ihre Tabelle mit "ON DELETE CASCADE" - Klausel etwa so:
Die ganze Zeile gelöscht werden, wenn (in diesem Fall) es ist die Muttergesellschaft der Benutzer die Zeile wird gelöscht.
P. S: ich weiß, das ist ein Toter thread, aber ich dachte, ich Stelle das hier für die Leute anzeigen, die in 2019. ;D