Aus mehreren Tabellen löschen
undso
- datenbank
Hi, ist es möglich, um Querys zu sparen, gleichzeitig in mehreren Tabellen zu löschen.
Sprich:
delete from TABELLE_1 where mitglidID=2;
delete from TABELLE_2 where mitglidID=2;
delete from TABELLE_3 where mitglidID=2;
Aus diesen drei Querys eine Query?
Grüße
Hi,
wenn es sich beim MitglidId um einen Schlüssl handelt, für den referentielle Integrität in Form von Fremdschlüssln und ON DELETE CASCADE eingerichtet ist, dann könnte es zureichen aus der Tabelle zu löschn, wo MitglidId der Primärschlüssel ist.
Ansonstn pauschal "nein". Und aus den 3 Queries 1 zu machen, macht deine Anwendung nicht automatisch schneller. Gelöscht werden muss ja trotzdem.
Allerdings hängt es auch vom verwendeten Datenbanksystem (DBMS) ab, was selbiges unterstützt.
Ciao, Frank
Hi Frank,
vielen Dank. Ich belasse dann das ganze, falls das von der Geschwindigkeit bzw. Datenbankbeanspruchung nicht so arg wild ist.
Ich habe eben nur sehr viele Querys, falls sich ein Mitglied von der Community löscht / kündigt.
Es werden dann eben alle Userspezifische Daten von der DB (mySQL 5) entfernt, damit die DB keine Leichen mehr aufweist.
Da aber das Kündigungsscript wahrscheinlich eh nicht oft in Anspruch genommen wird, wäre das zu verkraften.
:-)
Grüße
Hi,
wenn es dein Datenbanksystem und das API drumherum erlaubt, dann könntest du komplexere Vorgänge wie z.b. das Löschen eines Kontos, wo in mehreren Tabellen geackert werden muss auch
a) in eine Transaktion verlegen
-> so gewährleistest du auch Integrität allerding mit dem Nachteil von Locks, die u.U. auf Rows und Tabellen über die ganze Transaktion hinweg gehalten werden und den parallelen Zugriff von anderen Prozessen (lesend oder schreibend) blockieren können
b) in eine Stored Procedure (Gespeicherte Prozedur) in der Datenbank verlegen
-> somit baust du dir eine definierte Schnittstelle "DeleteAccount(int AccountId)" die du nur einmal von ausserhalb der DB aufrufen brauchst anstelle von 5 oder 6 Queries
c) = b) + a)
d) verwende "referential integrity" mit "foreign keys" on "on delete cascade"
e) setz einfach einen soft-flag für das Account und räume dann mittels eines Cron-Jobs irgendwann nachts alle Leichen weg ;)
So long,
Frank