Suche…
Einführung
Die DELETE-Anweisung wird zum Löschen von Datensätzen aus einer Tabelle verwendet.
Syntax
- DELETE FROM TableName [WHERE- Bedingung ] [LIMIT- Anzahl ]
LÖSCHEN Sie bestimmte Zeilen mit WHERE
Dadurch werden alle Zeilen gelöscht, die den WHERE
Kriterien entsprechen.
DELETE FROM Employees
WHERE FName = 'John'
LÖSCHEN Sie alle Zeilen
Wenn Sie eine WHERE
Klausel weglassen, werden alle Zeilen aus einer Tabelle gelöscht.
DELETE FROM Employees
In der TRUNCATE- Dokumentation finden Sie Details dazu, wie die Leistung von TRUNCATE verbessert werden kann, da Trigger, Indizes und Protokolle zum Löschen der Daten ignoriert werden.
TRUNCATE-Klausel
Verwenden Sie dies, um die Tabelle in den Zustand zurückzusetzen, in dem sie erstellt wurde. Dadurch werden alle Zeilen gelöscht und Werte wie das automatische Inkrementieren zurückgesetzt. Es protokolliert auch nicht jede einzelne Zeilenlöschung.
TRUNCATE TABLE Employees
LÖSCHEN Sie bestimmte Zeilen basierend auf Vergleichen mit anderen Tabellen
Es ist möglich, Daten aus einer Tabelle zu DELETE
wenn sie mit bestimmten Daten in anderen Tabellen übereinstimmen (oder nicht übereinstimmen).
Nehmen wir an, wir wollen Daten von Source DELETE
sobald sie in Target geladen sind.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Die meisten gängigen RDBMS-Implementierungen (z. B. MySQL, Oracle, PostgresSQL, Teradata) ermöglichen das Verknüpfen von Tabellen während DELETE
was einen komplexeren Vergleich in einer kompakten Syntax ermöglicht.
Nehmen wir an, das Aggregat wird einmal täglich aus Target erstellt und enthält nicht dieselbe ID, sondern dasselbe Datum. Nehmen wir an, dass wir Daten von Quelle gelöscht werden soll erst nach dem Aggregat für den Tag aufgefüllt wird.
Auf MySQL, Oracle und Teradata kann dies mit folgendem geschehen:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
In PostgreSQL verwenden Sie:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Dies führt im Wesentlichen zu INNER JOINs zwischen Quelle, Ziel und Aggregat. Die Löschung wird für Source ausgeführt, wenn die gleichen IDs im Ziel-UND-Datum vorhanden sind, das für diese IDs im Target vorhanden ist. Diese IDs sind auch in Aggregat vorhanden.
Dieselbe Abfrage kann auch (auf MySQL, Oracle, Teradata) geschrieben werden als:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Explizite Joins können in Delete
Anweisungen in einigen RDBMS-Implementierungen (z. B. Oracle, MySQL) erwähnt werden, werden jedoch nicht auf allen Plattformen unterstützt (z. B. unterstützt Teradata diese nicht).
Vergleiche können entworfen werden, um nicht übereinstimmende Szenarien mit allen NOT EXISTS
( NOT EXISTS
)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )