SQL Server DELETE Statement

cover image of blog article 'SQL Server DELETE Statement'

In diesem Blogbeitrag werden wir Ihnen zeigen, wie Sie mit dem DELETE Befehl praktisch umgehen können. Beispielhaft demonstrieren wir Ihnen, wie Sie einzelne Reihen, eine Tabelle oder ganze Datenbanken damit löschen können.

Wichtig ist hierbei zu beachten, dass mit dem DELETE Statement äußerst vorsichtig umgegangen werden sollte. Im Vergleich zu Windows gibt es keinen Papierkorb, aus dem Sie gelöschte Objekte wiederherstellen können. Überlegen Sie also gut, bevor Sie sich dazu entscheiden den Befehl auszuführen. Sie können sich auf die sichere Seite begeben, indem Sie mithilfe von Transaktionen Ihre Datenbanken verwalten, also Befehle erst dann in Kraft treten, nachdem Sie die Änderungen bestätigt haben.

Syntax

Wie man sich schon denken kann, ist der Schlüsselbegriff DELETE Teil des Befehls. Außerdem können Sie nicht nur bei Abfragen, sondern auch beim Löschen von Daten, eine Kondition setzen. Ein Beispiel hierfür ist das WHERE Statement. Beachten Sie allerdings - ist hier keine Bedingung gegeben, wird die komplette Datenbank gelöscht.

Beispielsyntax:

DELETE schema.TableName 
WHERE column = 1; -- WHERE Bedingung

Beispiel 1

Nun wenden wir den Syntax einmal an. Im folgenden werden alle Personen mit Vornamen Alex gelöscht.

USE [MeineDatenbank]
GO 

-- Delete Statement
DELETE [Unternehmen].[Mitarbeiter]
WHERE vorname = 'Alex';

-- Überprüfung 
SELECT * FROM [Unternehmen].[Mitarbeiter]
WHERE vorname = 'Alex';
GO

Alle Reihen von einer Tabelle löschen

Sie haben mehrere Möglichkeiten eine Tabelle zu löschen bzw. ihre Daten zu löschen. Eine davon ist, wie eben angesprochen, wenn keine WHERE Bedingung angegeben ist.

DELETE [Unternehmen].[Mitarbeiter];

Option 2 ist die Daten einer Tabelle mit einem TRUNCATE Statement zu entfernen. Es gibt jedoch einen wichtigen Unterschied zwischen TRUNCATE und DELETE. Zwar werden bei beiden die Daten der Tabelle entfernt, doch bleibt die Struktur der Tabelle nach einem TRUNCATE erhalten. Diese wird bei einem DELETE Statement ebenfalls gelöscht. Müssen Sie beispielsweise eine Tabelle mit neuen Daten füllen, ist es nicht notwendig, dass Sie die Tabelle löschen, sondern lediglich die bereits vorhandenen Daten entfernen. Somit haben Sie nicht den Aufwand die Tabelle und deren Auflagen erneut zu erstellen.

TRUNCATE TABLE [Unternehmen].[Mitarbeiter];

Nun sehen Sie, dass die Tabelle noch existiert, die Daten jedoch nicht:

SELECT * FROM [Unternehmen].[Mitarbeiter];

Transaktionen

Um eine gewisse Sicherheit einzubauen, wenn es um DML Befehle geht, können Sie eine Transaktion beginnen, bevor Sie anfangen Ihre Daten zu bearbeiten. Wenn Sie Ihre Bearbeitungen abgeschlossen haben, können Sie diese mit COMMIT bestätigen oder mit ROLLBACK widerrufen.

Beispiel:

BEGIN TRAN; 
-- DDL Statements wie z.B. DELETE  
COMMIT; -- Wenn die Bearbeitung bestätigt werden soll 
ROLLBACK; -- Wenn die Bearbeitung widerrufen werden soll

DELETE Foreign Key Error

Wenn Sie eine Datenbank erstellen, kommt es oft dazu, dass Sie Beziehungen zwischen Tabellen erstellen. Zum Beispiel “Primary Key” oder “Foreign Key” Bedingungen. Im Falle, dass Sie versuchen eine Tabelle oder Spalte zu löschen die eine solche Bedingung besitzt, werden Sie von der SQL Server Konsole mit folgendem Fehler konfrontiert:

Msg 547, Level 16, State 0, Line 146 The DELETE statement conflicted with the REFERENCE constraint
"XXX". The conflict occurred in database "XXX",
 table "XXX", column 'XXX'.

Kurzgesagt ist das Löschen dieser Tabelle nicht möglich, da eine Spalte in der aktuellen Tabelle den Foreign Key einer anderen Tabelle verwendet. Wenn Sie weiterhin beabsichtigen diese Tabelle oder Reihe zu löschen, ist es notwendig zu handeln. Einerseits können Sie die Foreign Key Bedingung löschen oder die ganze Reihe der Tabelle, die den Foreign Key verwendet.

Eine Datenbank löschen

Eine Datenbank zu löschen ist syntaxtechnisch ähnlich zum Löschen einer Tabelle mit dem DELETE Befehl. Dadurch, dass das Löschen einer Tabelle ein DML Befehl ist und das Entfernen einer Tabelle ein DDL Statement ist, wird hier der DROP Befehl verwendet.

DROP DATABASE datenbank;

Fazit

Zusammenfassend kann man sagen, dass das DELETE Statement für den Betrieb einer Produktionsdatenbank eine essentielle Rolle spielt. Andererseits ist der Befehl mit Vorsicht zu genießen, denn wenn Sie keine Transaktion starten bevor Sie versuchen Daten zu löschen, kommt es schnell dazu, dass Sie kostbare Daten verlieren oder gezwungen sind, ein Backup einzuspielen.

Wenn Sie Unterstützung brauchen Ihre Datenbank zu verwalten, stehen unsere Berater Ihnen gerne zur Seite. Nehmen Sie unverbindlich Kontakt über unser Kontaktformular zu unseren Experten auf.