Rolf B: Betroffene Datensätze / mysqli

Beitrag lesen

Hallo Pit,

nein, das geht nicht. Dafür müsstest Du die zu löschenden IDs vorher mit einem SELECT holen.

Muss es wirklich sein? Jede Lösung, die auch im Multiuser-Betrieb wasserdicht ist, müsste während des Löschvorgangs erstmal Locks setzen und die DB ausbremsen.

Wenn diese Query ein "Aufräumbatch" ist, der nicht von beliebigen Usern angestoßen werden kann, dann kannst Du es für 99% Sicherheit in zwei Schritten machen.

SELECT ID FROM tabelle WHERE ID NOT IN (SELECT ID FROM tabelle2);

Diese Ergebnismenge liest Du in dein Programm und protokollierst. Danach rufst Du den DELETE. Falls allerdings zwischen SELECT und DELETE ein Satz aus tabelle2 gelöscht wurde, wird dessen ID aus tabelle1 gelöscht ohne dass protokolliert wurde.

Um sicherer zu sein, könntest Du die zu löschenden IDs in eine TEMP-Tabelle des Users SELECTen, danach die Temp-Tabelle ins Programm lesen und danach den DELETE so aufsetzen dass er die IDs der TEMP-Tabelle löscht. Das ist aber viel Mühe für ein paar geloggte IDs.

Aber wenn Sätze in tabelle zu löschen sind, wenn die ID nicht in tabelle2 steht - ist dann die ID in tabelle nicht ein Foreign Key? Den könntest Du per Kaskade automatisch löschen und wüsstest dann ganz genau, dass nach einem DELETE in tabelle2 in tabelle aufgeräumt wurde.

Rolf

--
sumpsi - posui - clusi