Zurück zur Artikelliste Artikel
7 Leseminuten

Was ist die DELETE-Anweisung in SQL?

In diesem Artikel wird die Verwendung der DELETE-Anweisung erläutert, eine der wichtigsten Methoden zum Entfernen vorhandener Datensätze aus Ihrer Datenbank. Zunächst wird die Syntax erläutert, gefolgt von einigen leicht verständlichen Beispielen.

Die Anweisung DELETE in SQL ist äußerst nützlich. Sie ermöglicht es Ihnen, veraltete oder "schlechte" Daten aus Ihren Datenbanktabellen zu entfernen. Bei der Verwendung der Anweisung DELETE ist Vorsicht geboten, da der Vorgang nicht umkehrbar ist. Es wird kein Dialogfeld angezeigt, in dem Sie aufgefordert werden, den Vorgang zu bestätigen. Sobald Sie eine DELETE-Abfrage ausgeführt haben, sind die Daten weg - für immer!

Die Anweisung DELETE ist als Datenmanipulationsbefehl bekannt. Dieser Artikel befasst sich mit den anderen Befehlen dieser Art, nämlich INSERT und UPDATE.

Sehen wir uns nun die Syntax von SQL DELETE an.

SQL DELETE-Syntax

Die Syntax der DELETE-Anweisung lautet wie folgt:

DELETE FROM  [WHERE ]

Die Tabelle, aus der Sie Daten löschen möchten, steht hinter der Anweisung DELETE.

Die eckigen Klammern zeigen an, dass diese WHERE Klausel völlig optional ist. In der Praxis werden Sie diese Klausel jedoch fast immer verwenden - wenn Sie keine WHERE Klausel einfügen, werden alle Daten aus der Tabelle gelöscht.

Aus diesem Grund ist es immer eine gute Idee, SELECT zu verwenden, um die Daten anzuzeigen, die Sie löschen möchten. Wenn das Ergebnis Ihrer Abfrage SELECT mit den Daten übereinstimmt, die Sie löschen möchten, ersetzen Sie einfach die SELECT in Ihrer Abfrage durch die Anweisung DELETE. Alle anderen Teile Ihrer Abfrage können unverändert bleiben. So stellen Sie sicher, dass Sie nicht versehentlich einige wichtige Daten löschen.

Damit ist unser Blick auf die SQL-Syntax DELETE beendet. Es ist nun an der Zeit, einige praktische Beispiele zu betrachten, die verschiedene Verwendungsmöglichkeiten der Anweisung DELETE aufzeigen und auf einige Probleme mit den Berechtigungen eingehen, mit denen Sie möglicherweise konfrontiert werden.

SQL DELETE-Berechtigungen

Bevor wir unsere Beispiele durchgehen, ist es wichtig zu wissen, dass Sie (je nachdem, welchen SQL-Dialekt Sie verwenden) möglicherweise die Benutzerrechte ändern müssen, damit Sie Datensätze mit der Anweisung DELETE ändern können.

Standardmäßig startet MySQL Workbench im sicheren Modus; Sie können UPDATE oder DELETE nicht ohne eine WHERE Bedingung verwenden.

Bei der Verwendung von MySQL erhalten Sie zum Beispiel die Meldung: "Sie verwenden den sicheren Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet. Um den sicheren Modus zu deaktivieren, schalten Sie die Option in den Einstellungen → SQL-Editor um und stellen Sie die Verbindung erneut her".

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten.

  1. Ändern Sie Ihre Einstellungen wie folgt:
    1. Gehen Sie zu Bearbeiten → SQL Editor.
    2. Klicken Sie auf die Registerkarte SQL Editor und deaktivieren Sie das Kontrollkästchen Sichere Updates.
    3. Klicken Sie auf Abfrage → Erneut mit dem Server verbinden.
    4. Führen Sie Ihre SQL-Abfrage aus.
  2. Oder Sie können die folgende Abfrage ausführen:
    SET SQL_SAFE_UPDATES = 0;

Nachdem Sie eine dieser Optionen ausgeführt haben, sollten Sie in der Lage sein, DELETE zu verwenden, um die Daten aus Ihren Tabellen zu entfernen.

Kommen wir nun zu den Beispielen!

SQL DELETE Beispiele

Einfaches DELETE

Stellen Sie sich vor, wir verwalten eine Mitarbeiterdatenbank und haben gerade die Nachricht erhalten, dass einige unserer Mitarbeiter das Unternehmen verlassen haben. Wir werden sie aus unserer employees Tabelle entfernen. Werfen wir einen Blick auf den aktuellen Zustand dieser Tabelle:

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

Stellen Sie sich vor, wir müssten George Harrison und Ringo Starr aus unserer Tabelle entfernen. Was sind unsere Optionen?

Bevor wir diese Datensätze entfernen, sollten wir uns über die Werte der Spalte employee_id vergewissern. Nachdem wir das getan haben, würde die DELETE-Abfrage wie folgt aussehen:

DELETE FROM employees
WHERE employee_id = 3 OR employee_id = 4

Dies würde George und Ringo erfolgreich aus unserer Tabelle entfernen.

Sie können auch eine einzige Bedingung angeben, die beide Datensätze auf einmal erfasst. In diesem Fall, da sowohl George als auch Ringo über 40 Jahre alt sind, könnten wir die Spalte age verwenden:

DELETE FROM employees
WHERE age > 40

Wenn wir diese Abfrage ausführen, haben wir die folgenden Datensätze in unserer employees Tabelle.

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36

Unsere Datensätze wurden erfolgreich gelöscht! Wenn Sie weitere DELETE-Beispiele sehen möchten, schauen Sie sich diesen Kochbuchartikel an , der Ihnen zeigt, wie Sie eine einzelne oder mehrere Datenzeilen löschen können.

Betrachten wir als nächstes ein fortgeschritteneres Beispiel, das eine Unterabfrage zum Löschen von Daten verwendet.

Unterabfrage DELETE

Sie können Daten aus Ihren Tabellen auch mit Hilfe von Subqueries löschen. Eine Subquery ist eine Abfrage, die als Teil einer anderen verwendet wird. Sie können mehr über Unterabfragen erfahren, indem Sie diesen anfängerfreundlichen Artikel lesen. Schauen wir uns ein Szenario an, in dem wir eine DELETE mit einer Subquery verwenden können.

Wir verwenden unsere employees Tabelle wieder:

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

Wir haben auch eine sales_team Tabelle, die Datensätze für alle Mitarbeiter der Verkaufsabteilung des Unternehmens enthält:

idfirst_namelast_name
1JohnLennon
3GeorgeHarrison

Wir haben gerade die schreckliche Nachricht erhalten, dass das Verkaufsteam entlassen werden soll. Es ist unsere Aufgabe, die Datensätze employees und sales_team Tabellen zu aktualisieren.

Ich werde demonstrieren, wie eine Subquery uns in diesem speziellen Szenario helfen kann. Hier ist die Abfrage:

DELETE FROM employees
WHERE employee_id 
IN (SELECT id
FROM sales_team)

Ok, lassen Sie uns das aufschlüsseln.

Die Abfrage in runden Klammern (d. h. die Unterabfrage) gibt alle id Werte aus der sales_team Tabelle zurück:

SELECT id FROM sales_team

Diese Abfrage liefert uns die Werte 1 und 3.

Schauen wir uns den DELETE Teil der Hauptabfrage an:

DELETE FROM employees
WHERE employee_id 
IN...

Beachten Sie die WHERE Klausel. In diesem Teil der Abfrage geht es darum, Datensätze zu löschen, bei denen employee_id in den Ergebnissen unserer Unterabfrage enthalten ist. Denken Sie daran, dass die Unterabfrage zu 1 und 3 ausgewertet wurde. Diese Abfrage wird also ausgewertet zu:

DELETE FROM employees
WHERE employee_id 
IN (1,3)

Angenommen, wir führen die gesamte Abfrage aus und verwenden die SELECT Abfrage unten, um die Ergebnisse anzuzeigen:

SELECT employee_id, first_name, last_name, age
FROM employees

Dies ist das Ergebnis:

employee_idfirst_namelast_nameage
2PaulMcCartney36
4RingoStarr49

Da haben wir es! Das Verkaufsteam wurde erfolgreich aus der Tabelle employees Tabelle entfernt. Sie können sehen, wie nützlich eine Unterabfrage für diesen Anwendungsfall war.

Dies war ein etwas fortgeschrittenerer Anwendungsfall. Bei der Erörterung der Anweisung DELETE sollte man auch die Anweisungen TRUNCATE und DROP erwähnen:

  • TRUNCATE ist schneller als DELETE, da sie die Tabelle nicht durchsucht, bevor sie Datensätze entfernt. Aus diesem Grund kann sie nicht mit der WHERE-Bedingung verwendet werden und auch nicht angeben, wie viele Zeilen gelöscht wurden, wenn der Vorgang abgeschlossen ist.
  • Der Befehl DROP TABLE entfernt alles, was mit dieser Tabelle zu tun hat: die Tabellendefinition und alle zugehörigen Indizes, Trigger und Beschränkungen.

Um mehr über diese beiden Methoden zum Entfernen von Daten zu erfahren, lesen Sie diesen Artikel über die Verwendung von Unterabfragen mit INSERT, UPDATE und DELETE. Sie können auch diesen Artikel lesen , in dem der Unterschied zwischen DELETE, TRUNCATE und DROP erläutert wird.

Löschen von Primärschlüssel- und Fremdschlüssel-Beschränkungen

Ein weiterer Punkt, den wir besprechen müssen, sind die Primärschlüssel- (PK) und Fremdschlüssel-Beschränkungen (FK). Wenn Sie an kleineren Beispielen wie den in diesem Artikel gezeigten arbeiten, müssen Sie sich nicht um PK- und FK-Beschränkungen kümmern. Wenn Sie jedoch mit einer großen bestehenden Datenbank arbeiten, werden Sie auf jeden Fall auf sie stoßen.

Wenn Sie Daten aus einer Tabelle löschen, möchten Sie vielleicht auch alle Beschränkungen entfernen, die mit den Daten in dieser Tabelle verbunden sind. Sehen Sie sich die folgenden Beispiele an, wenn dies auf Sie zutrifft:

  • Dieses Beispiel zeigt Ihnen, wie Sie einen Primärschlüssel löschen.
  • Dieses Beispiel zeigt Ihnen, wie Sie eine Fremdschlüssel-Beschränkung löschen können.

Behalten Sie Ihre Daten mit SQL DELETE relevant

Damit ist unser umfassender Blick auf die SQL-Anweisung DELETE abgeschlossen. Wir haben die Syntax demonstriert und mögliche Verwendungszwecke dieses Befehls anhand mehrerer Beispiele erkundet.

Wenn Sie eine umfassendere SQL-Ausbildung wünschen, sollten Sie sich unseren SQL-Lernpfad von A bis Z ansehen, der Ihnen die Grundlagen vermittelt und dann zu fortgeschritteneren Themen übergeht.