Datensätze löschen - DELETE FROM

0 | 71892 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Datensätze löschen - DELETE FROM" mit Ihrem Wissen!

Anzeige Hier werben

Zum Löschen von Datensätzen steht unter SQL der Befehl DELETE zur Verfügung. Dass Sie nicht mehr benötigte Daten löschen sollten, muss ja nicht tiefschürfend begründet werden. Sie können dann den Computer und die Datenbank selber besser warten, da können die Festplatten neuer Geräte noch so groß sein. Auch die Zugriffe werden einfacher und schneller.

Allerdings ist es immer voller Risiko, etwas zu löschen. Theoretisch gibt es die Möglichkeit, mit ROLLBACK eine Löschung wieder zurückzunehmen, aber das hängt mal wieder vom Datenbanksystem ab, das Sie benutzen. Vergewissern Sie sich lieber, dass Sie genau die Daten löschen, die Sie auch löschen wollen.

Erinnern Sie sich auch an eventuell angelegte Fremdschlüssel: Denen konnten Sie ja eine Anweisung mitgeben, wie eine abhängige Tabelle auf Löschungen in der Vatertabelle reagieren soll.

Wenn Sie Datensätze einer Tabelle löschen, kann sich das also auch auf andere Tabellen auswirken – oder sogar gar nicht durchgeführt werden:

 
sql
1
ON DELETE NO ACTION 

Die Anweisung verhindert, dass Sie in der Vatertabelle Datensätze löschen, auf die sich Datensätze der abhängigen Tabelle beziehen.

Einführungsbeispiel

Nehmen wir an, der Kunde Rainer Zwilling wurde zweimal in die Tabelle aufgenommen. Sie wollen nun einen der Einträge löschen. Nachdem Sie sich für den Datensatz mit der Kundennummer 10 entschieden haben, gehen Sie so vor:

 
sql
1
2
DELETE FROM kunde
   WHERE kundennr = 10;

Grundsätzlich sieht der DELETE-Befehl so aus:

 
HTML
1
2
DELETE FROM tabellenname
   [WHERE auswahlbedingung];

Sie geben die Tabelle an, aus der Sie löschen wollen, und schränken in der Bedingung die Datensätze ein, die Sie entfernen wollen. Ohne WHERE und Auswahlbedingung wird der ganze Inhalt der Tabelle gelöscht. Das ist aber nur in den seltensten Fällen nötig. Die Tabellendefinition bleibt bestehen.

Die Auswahlbedingung selbst können Sie als einfachen Vergleich ausgestalten oder mit einer Unterabfrage kombinieren. Inzwischen bereitet Ihnen der Umgang mit WHERE ganz sicher keine Schwierigkeiten mehr.

Beim Löschen von Datensätzen werden natürlich auch die Integritätsregeln der Datenbank berücksichtigt. Wenn ein Fremdschlüssel auf eine Tabelle existiert und noch Datensätze in der zugehörigen Tochtertabelle existieren, wird das Datenbanksystem das Löschen der oder des entsprechenden Datensatzes ablehnen. In unserer Übungsdatenbank läge dieser Fall vor, wenn in der Tabelle bestellung mindestens ein Datensatz existiert, der einem Kundendatensatz über den Fremdschlüssel in der Tabelle kunde zugeordnet ist. Sie können einen solchen Kundendatensatz dann nicht löschen, wenn nicht der Fremdschlüssel in der Tabellendefinition mit ON DELETE CASCADE definiert wurde.

Hinweise zum Praxiseinsatz

Löschbefehle beinhalten immer das Risiko, dass aufgrund einer fehlerhaft formulierten Abfrage Daten unabsichtlich gelöscht werden. Wer auf Nummer sicher gehen will, führt den Befehl zuerst mit einem SELECT aus und prüft, ob die gewünschten Datensätze selektiert werden.

Unterabfragen in DELETE-Befehlen

Ebenso wie in UPDATE-Befehlen können Unterabfragen grundsätzlich auch in DELETE-Befehlen verwendet werden. Sie wollen beispielsweise alle Kunden löschen, deren letzte Rechnung vor dem 1. Januar 2004 liegt. Der Befehl hierfür lautet:

 
sql
1
2
3
4
5
6
DELETE FROM kunde WHERE id
   IN
   (
   SELECT kundennr FROM bestellung GROUP BY kundennr
   HAVING MAX(rechnungsdatum) < '2004-01-01'
   );

In der Unterabfrage werden alle Kundennummern selektiert, deren letzte Rechnung vor dem 01.01.2004 liegt. Dies wird in der Form durchgeführt, dass die Rechnungen über die Kunden gruppiert werden und innerhalb des jeweiligen Kunden geprüft wird, ob das letzte Rechnungsdatum (MAX(rechnungsdatum)) vor dem gewählten Datum liegt. Alle Kunden-IDs, die von der Unterabfrage zurückgegeben werden, werden dann über den DELETE-Befehl gelöscht.

Nun müssen Sie auch beim Einführungsbeispiel die Kundennummer von Rainer Zwilling gar nicht mehr heraussuchen, sondern lösen dieses Problem mit einer Unterabfrage:

 
sql
1
2
3
4
5
6
7
DELETE FROM kunde
WHERE kundennr =
(
   SELECT MAX(kundennr)
   FROM kunde
   WHERE name = 'Zwilling' AND vorname = 'Rainer'
);

Buchhinweis

Bild zu Datensätze löschen - DELETE FROM

Die Grundversion dieses Artikels stammt aus dem Buch "Einstieg in SQL" von Marcus Throll und Oliver Bartosch und wurde uns von Galileo Design zur Verfügung gestellt hat. Das Buch kann über die Webseite des Galileo Verlag bestellt werden


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Datensätze löschen - DELETE FROM" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Datensätze löschen - DELETE FROM" hier bearbeiten.

Mitarbeiter
  • Meine Schwerpunkte liegen im Bereich Grafikdesign, SEO und Management. Seit sieben Jahren bin ich als Geschäftsführer der Team23 GbR tätig, die Webdesign in Augsburg anbietet, sowie Webmasterpro.de betreut.
  • Ich bin Schüler eines Gymnasiums und beschäftige mich in meiner Freizeit seit vielen Jahren mit HTML- und CSS-Programmierung. Außerdem interessiere ich mich für PHP (WordPress, Drupal, ...), Ruby und Ruby on Rails.