Halihallo Markus
Nun meine eigentliche Frage: Gibt es irgendwie die Möglichkeit Datensätze auszulesen und gleichzeitig zu löschen? Oder die ausgelesenen Datensätze zu "markieren" um die in Folge zu löschen?
Ohne Primary Key und Table-Lock nicht. Die einfachste Lösung demnach wäre, wenn du
einen Primary Key mit autoinc einführst. Der Selekt liefert dir die Daten + Primary Key,
den Primary kannst du beim nachfolgenden DELETE verwenden, um wirklich ausschliesslich
die selektieren Datensätze (auch wenn andere auf die "alte" WHERE passen) zu löschen.
DELETE FROM table WHERE ID IN (previously-selected-primary-keys)
Oder hätte irgendjemand eine alternative Idee wie ich das Problem lösen könnte?
Es gäbe mehrere Ansätze:
- die zuvor vorgestellte PRIMARY KEY-Methode. Problem hier: Primary Key impliziert
Unique Index und bei derart temporären Daten drückt das auf die Performance. - vor dem SELECT bis nach dem DELETE ein TABLE LOCK, sodass andere Prozesse auf die
Tabelle während dieser Aktion nicht mehr schreiben zugreifen können. Somit wäre der
SELECT/DELETE atomar, was soviel bedeutet, dass du keine Datensätze löschst, die nicht
zuvor selektiert wurden. Problem hier: Performance, Verzögerung bei Schreibzugriffen. - Du findest dennoch eine Möglichkeit diese Datensätze eineindeutig anzusprechen
(wie mit ID, Primary Key), sodass die WHERE von SELECT und DELETE dieselben Datensätze
ansprechen. - Arbeiten mit Connection-Based-Temporary-Tables, die HEAP-Tables. Nachteil: Das
schreiben und auslesen müsste im selben Prozess (oder gar der selben Connection)
möglich sein. Ich weiss nicht, ob dies von der Aufgabenstellung her möglich ist.
Das Problem ist schlicht: Um dieselben Daten über SELECT und DELETE zu verarbeiten,
_musst_ du sie eindeutig ansprechen können. Die vorgeschlagenen Methoden von oben
garantieren dies (bei richtiger Umsetzung natürlich ;-)). Ohne eineindeutige
Identifikation der Datensätze _muss_ man in diesem Kontext mit Datenverlust rechnen.
Viele Grüsse
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.