Löschung eines Users auf der gesamten Datenbank

CreativPur

Erfahrenes Mitglied
Hi
ich habe mal eine Frage.
Ich habe eine MySql-Datenbank mit mehreren Tabellen.

In allen Tabellen findet man eine sogenannte User-Id.

Das Löschen einer User-Id in einer Tabelle ist mir bekannt, aber nun meine Frage..

Ist es möglich, mit der User-Id alle Einträge der gesamten Datenbank zu löschen, oder muss man per PHP jede einzelne Tabelle ansprechen ?
 

Zvoni

Erfahrenes Mitglied

Zvoni

Erfahrenes Mitglied
Zu meinem Link mit den JOIN's:
Aufpassen: Die Meinungen gehen auseinander ob INNER JOIN oder LEFT JOIN verwendet werden soll

In Tabelle1 hast du Sätze mit UserID=1, 2, 3, 4, 5 und 6
In Tabelle2 hast du Sätze mit UserID=1, 2, 3, 5 und 6 (die 4 fehlt)

Wenn du jetzt alles mit UserID=4 löschen willst (in allen Tabellen):
mit einem INNER JOIN der beiden Tabellen wird nichts gelöscht (da die 4 in Tabelle2 fehlt)
mit einem LEFT JOIN musst du wissen, in welcher Tabelle der Wert definitiv vorkommt.
Ich glaube du brauchst einen FULL OUTER JOIN

Einfach mal in ner Test-DB mit allen 4 Möglichkeiten rumspielen (Im Fall von 2 Tabellen --> Wert ist in beiden, Wert ist in keiner, Wert ist in Table1 aber nicht in Table2, Wert ist in Table2 aber nicht in Table1)
Aircode
SQL:
DELETE * FROM
MyTable1
FULL OUTER JOIN
MyTable2
ON
MyTable1.UserID=MyTable2.UserID
WHERE
MyTable1.UserID=4

EDIT: Sehe ich das richtig, dass MySQL keinen FULL OUTER JOIN unterstützt?!?!?!
MySQL - Joins - Full Outer Join
Und hier, wie man es trotzdem hinbekommt:
MySQL DELETE FROM with UNION subquery by IN condition
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Wenn du die Fremdschlüssel explizit deklarierst (FOREIGN KEY), kannst du auch auch "ON DELETE CASCADE" o.Ä. verwenden.
In der Theorie klingt das genau nach dem, was du möchtest. Wie Praktikabel das jedoch ist, weiß ich nicht.
 

Zvoni

Erfahrenes Mitglied
Wenn du die Fremdschlüssel explizit deklarierst (FOREIGN KEY), kannst du auch auch "ON DELETE CASCADE" o.Ä. verwenden.
In der Theorie klingt das genau nach dem, was du möchtest. Wie Praktikabel das jedoch ist, weiß ich nicht.
War auch mein erster Gedanke, würde aber mWn nur funktionieren, wenn er eine eigene "user"-Tabelle führt (Stichwort: Application-User vs. MySQL-User)

EDIT: bzw. ---> Geht das überhaupt einen Fremdschlüssel auf einen Primärschlüssel in einem anderen Schema auf dem gleichen Server zeigen zu lassen?
die Systemtabelle "user" ist, IIRC, im Schema "mysql", wobei ich es jetzt nicht im Kopf habe, ob die Sätze dort einen "anonymen" PK haben.....
 

ComFreek

Mod | @comfreek
Moderator
@Zvoni Ich habe gar nicht mitbekommen, dass der Fragestellende hier MySQL-Nutzer meinte. Wo genau steht das denn? :) Ich bin davon ausgegangen, dass er eine dedizierte Nutzertabelle hat (wie üblich eben).
 

Zvoni

Erfahrenes Mitglied
@Zvoni Ich habe gar nicht mitbekommen, dass der Fragestellende hier MySQL-Nutzer meinte. Wo genau steht das denn? :) Ich bin davon ausgegangen, dass er eine dedizierte Nutzertabelle hat (wie üblich eben).
Behaupte ich doch gar nicht, dass er "MySQL"-User benutzt. Ich geh ja auch davon aus, dass er eine eigene Tabelle hat.
Nichtsdestotrotz ist seine Frage zulässig, und die PrimärSchlüssel-FremdSchlüssel - Mechanik via "ON DELETE CASCADE" macht nur Sinn, wenn er den User selbst löschen will.

Ein Use-Case für seine Frage könnte sein: Forums-Software/Datenbank, in welcher er für benannte User-ID alle Posts löschen will, ohne den User selbst löschen zu müssen/wollen.

Meine Frage mit den "MySQL"-usern war eher nur so interesse halber
 

Neue Beiträge