Frage von TheLeon111, 32

MySQL | Werte löschen oder "deleted = 1" setzen?

Hallo,

ich arbeite gerade an einer MySQL Datenbank und möchte Zeilen "löschen". Nun stell ich mir die Frage, wie ich es machen soll. Soll ich wirklich mit "DELETE.." arbeiten, oder eine Spalte deleted machen, bei der ich ein Wert auf 1 setze und das beim Filtern beachten? Ich habe schon gehört, dass das DELETE Statement nicht so gut sei. Was wäre besser?

Antwort
von Berny96, 10

Willst du die Daten unwiderruflich löschen? 

Verwende DELETE.

Willst du die Daten noch irgendwann verwenden?

Nutze doch für die extra Spalte TINYINT statt einer Zahl. Er ist der kleinste sprich platzsparendste Datentyp wenn man lediglich ja oder nein speichern will.

Der DELETE Statement arbeitet nicht langsam. Viel eher braucht das Löschen eines Datensatzes eben seine Zeit. Es gibt gar keine andere Möglichkeit einzelne Datensätze gezielt zu löschen. Wie oft verwendet man ihn denn schon? Wenn man ihn täglich verwendet um große Datenmengen zu löschen dann sollte man dafür sorgen dass man die Mengen unterteilt und man Sie nicht in einem Durchgang alle löscht um eben Zeitverzögerungen zu vermeiden. 

Antwort
von wotan38, 3

Das kommt auf die Aufgabe an. Wenn der Satz irgendwann noch gebraucht wird, sollte man ihn nicht löschen, sondern entsprechend markieren. Wenn er nicht mehr gebraucht wird ist es besser zu löschen, denn sonst ist die Datenbank irgendwann vollgemüllt von Schrott und wird langsam. Der Löschbefehl selber ist weder gut noch schlecht.

Ich habe bei einem Kunden z.B. eine Mitgliederverwaltung laufen, bei dem die Mitglieder erst nach 5 Jahren gelöscht werden. Bei der aktuellen Verarbeitung werden diese Sätze aufgrund des Austrittdatums ignoriert. Wird einem Mitglied wegen Verfehlungen gekündigt, wird es überhaupt nicht gelöscht. Denn sonst könnte er nach einiger Zeit sich wieder neu anmelden und niemand würde das merken.

In bei personenbezogenen Daten gibt es sogar gesetzliche Regelungen, wann diese Daten gelöscht werden müssen.

Antwort
von xGlumi, 18

Die Frage ist ja eigentlich nur, ob du den Datensatz wirklich unwiderruflich löschen willst, oder nicht.

Wenn du es so willst, dann solltest du das DELETE-Statement benutzen.

Wenn es nur "oberflächerlich" gelöscht sein sollte, dann solltest du eine Spalte erstellen, die das handled.

Ausserdem....

Ich habe schon gehört, dass das DELETE Statement nicht so gut sei.

Warum sollte es nicht so gut sein? Wer erzählt soetwas?


Frage2: Wieso um alles hast du "Java" an die Frage getaggt?

MFG xGlumi

Kommentar von TheLeon111 ,

Irgendwer hat mir mal erzählt, dass man es vermeiden soll, vor allem, wenn man A_I benutzt. Da ich es mir aber nicht ganz vorstellen konnte, habe ich 'mal nachgefragt ;-)

Und ich habe Java getaggt, da ich gerade Java programmiere und viele, die MySQL benutzen auch Java dafür verwenden. Hätte es aber auch weglassen können.

Antwort
von zalto, 8

Es gäbe noch eine dritte Möglichkeit, in Richtung "Archivierung": Die Datensätze werden in ein Archiv (Archivtabelle, Archivdatenbank) überführt und erst dann am ursprünglichen Ort gelöscht.

Das bewahrt Dich davor, überall ein "deleted = 1" abfragen zu müssen und hält die Datenmenge am ursprünglichen Ort dennoch in einem überschaubarem Rahmen. Wenn Du dann doch noch mal Daten zurückholen willst, dann hast Du sie immer noch vorliegen. Und Du kannst klar unterscheiden zwischen "produktiven Daten" und "archivierten Daten".

Antwort
von MarcelDavis321, 20

kann man nicht pauschal sagen... Wenn du den Content doch norchmal irgendwo benutzen willst ist deleted = 1 ne option aber dann musst du bei jedem select statement extra prüfen ob delted = 0 ist...

Also eigentlich eher delete

Kommentar von TheLeon111 ,

Super, danke!

Keine passende Antwort gefunden?

Fragen Sie die Community