dedlfix: Betroffene Datensätze / mysqli

Beitrag lesen

Tach!

Ich würde mir gerne im "Erfolgsfall" die gelöschten IDs mitloggen. Aber wie spucke ich die aus?

DELETE erzeugt keine Ergebnismenge. Und es würde mich wundern, wenn es eine erzeugen würde, die mit einem nachfolgenden Statement abzufragen geht.

Mal allgemein gesprochen: Nicht alle Tabellen haben Primary Keys, und ob immer nur die IDs von gelöschten Datensätzen interessant sind, ist auch keine Regel. Wie also müsste das DBMS arbeiten? Datensatz löschen, gut. Aber da davon noch Werte interessant sind, kopieren wir vorher die Daten anderswohin. Hmm, zuzüglich der Datensätze bei Cascade Delete? Und dann muss die Menge (oder Teile daraus) zum Client kommen, dann kann auch das weg. Aber lohnt es sich, solch ein Vorgehen einzubauen? Nicht wirklich. Die Datensätze, die vom WHERE betroffen sind, kann man sehr gut auch vorher per SELECT ermitteln. Man kann sich das Umständliche also sparen.

ich hätte wirklich die IDs selber gerne geloggt und ich befürchte, dass das mit meiner Query nicht geht. Oder gibts da einen Weg?

Es geht noch andere Wege, besonders wenn die Wahrscheinlichkeit hoch ist, dass zwischen Select und Delete Änderungen in der Menge auftreten könne, und das berücksichtigt werden muss. Wird aber alles umständlicher.

  • Selektiere die IDs der zu löschenden Datensätze, und erzeuge daraus eine Temporary Table (INSERT ... SELECT ...).
  • Lösche die Datensätze, deren IDs in der Temptable sind.
  • Selektiere alle Daten der Temptable mit einem normalen SELECT und Fetchen.
  • Schließe die Verbindung, Temptable wird dabei gelöscht.

dedlfix.