Zum Inhalt springen

on delete cascade erweitern


daniel_bln

Empfohlene Beiträge

Guten Abend,

ich habe momentan ein Problem beim Löschen von Datensätzen.

Ich arbeite mit einer MySQL Datenbank und habe zwei Tabellen:

Zum einen diese:

Tabelle 1:

|ID|IDNr|....

ID und IDNr sind Unique. Es können mehrere Einträge für eine ID existieren, wobei dann immer die IDNr unterschiedlich ist.

Dann habe ich noch eine andere Tabelle:

|ID|lang|...

ID ist hier primary key und gleichzeitig ein fremdschlüssel auf die ID der ersten Tabelle.

Sobald eine Zeile aus der ersten Tabelle gelöscht wird, sodass die gelöschte ID in der gesamten Tabelle nicht mehr existiert, soll der zugehörige Datensatz in der 2.Tabelle für die entsprechende ID auch gelöscht werden.

Habe das mal mit On DELETE CASCADE probiert nur ist das Problem hier, dass er nach jedem gelöschten Datensatz in der ersten Tabelle den entsprechenden Datensatz in der zweiten Tabelle gelöscht hat, obwohl die ID in der ersten Tabelle noch existieren könnte.

Er sollte also bevor den Datensatz des Fremdschlüssels löscht erst einmal überprüfen, dass es keinen Datensatz mehr mit der ID in der ersten Tabelle gibt und erst dann sollte er in die zweite Tabelle reingehen und löschen.

Ich würde On Delete Cascade also gerne irgendwie erweitern oder existiert für sowetwas schon eine Funktion??

Oder muss ich das mit einerm Trigger machen? Wenn ja wie würde das ungefähr aussehen? Wie müsste ich dann vorgehen?

Hoffe habe mich verständlich ausgedrückt wo das Problem liegt.

liebe Grüße daniel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde On Delete Cascade also gerne irgendwie erweitern oder existiert für sowetwas schon eine Funktion??

also ganz speziell für das problem gibt es meines wissens nach nichts. Das CONSTRAINT selbst gibt das auch nicht her, aber helfen würde dir hier ein TRIGGER -> MySQL :: MySQL 5.1 Reference Manual :: 12.1.19 CREATE TRIGGER Syntax

Link zu diesem Kommentar
Auf anderen Seiten teilen

die ID der gelöschten zeile erhälst du mit OLD.ID

damit kannst du ja dann prüfen ob es noch datensätze mit dieser ID gibt und entsprechend handeln.

Mag sein, dass mysql das vielleicht (noch) erlaubt, jede andere vernünftige Datenbank wird beim Versuch aus einem Row Level Trigger auf Tabelle A in Tabelle A zu selektieren einen Fehler werfen.

Damit ist dieser Vorschlag nicht umsetzbar (im übrigen sollte keine fachliche Logik in einem Trigger abgelegt werden, auch wenn diverse Forenmitglieder dies aufgrund von Bücherwissen befürworten).

Eine solche Löschlogik lässt sich entweder durch eine entsprechend programmierte Zugriffsschicht lösen, die dann aber auch mit Sperren arbeiten muss, damit man in einem Multiusersystem keinen fachlich inkonsistenten Zustand erhält, oder aber man hat einen Aufräumjob, der die im Laufe des Tages angefallenen Leichen zu definierten Zeiträumen entfernt.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

hi,

ich habe jetzt einen entsprechenden Trigger gebastelt.

Es ist irgendein Syntaxfehler in dem mySQL Trigger drin, den ich schon seit Tagen versuchen zu beheben. Ich finde ihn nur leider nicht.

 


DROP TRIGGER IF EXISTS my_Trigger;

CREATE TRIGGER my_Trigger AFTER delete

ON dierk.catchword


FOR EACH ROW BEGIN


if ((select COUNT(*) From catchword WHERE catchwordID = old.catchwordID) = 0)


 THEN  delete FROM translatecword WHERE catchWordID = old.catchwordID


END IF;


  END;


Weiß vielleicht jemand von euch wo der syntaxfehler liegt??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...