Szukaj…
Wprowadzenie
Instrukcja DELETE służy do usuwania rekordów z tabeli.
Składnia
- USUŃ Z nazwy tabeli [GDZIE warunek ] [ liczba LIMIT]
USUŃ niektóre wiersze GDZIE
Spowoduje to usunięcie wszystkich wierszy spełniających kryteria WHERE
.
DELETE FROM Employees
WHERE FName = 'John'
USUŃ wszystkie wiersze
Pominięcie klauzuli WHERE
spowoduje usunięcie wszystkich wierszy z tabeli.
DELETE FROM Employees
Zobacz dokumentację TRUNCATE, aby uzyskać szczegółowe informacje na temat tego, jak wydajność TRUNCATE może być lepsza, ponieważ ignoruje wyzwalacze, indeksy i dzienniki, aby po prostu usunąć dane.
Klauzula TRUNCATE
Użyj tego, aby zresetować tabelę do stanu, w którym została utworzona. Spowoduje to usunięcie wszystkich wierszy i zresetuje wartości, takie jak auto-inkrement. Nie rejestruje również każdego usunięcia wiersza.
TRUNCATE TABLE Employees
USUŃ niektóre wiersze na podstawie porównań z innymi tabelami
Możliwe jest DELETE
danych z tabeli, jeśli są one zgodne (lub są niezgodne) z pewnymi danymi w innych tabelach.
Załóżmy, że chcemy DELETE
dane ze źródła po załadowaniu do obiektu docelowego.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Najpopularniejsze implementacje RDBMS (np. MySQL, Oracle, PostgresSQL, Teradata) umożliwiają łączenie tabel podczas DELETE
co pozwala na bardziej złożone porównanie w zwartej składni.
Zwiększając złożoność oryginalnego scenariusza, załóżmy, że Agregat jest budowany z Targetu raz dziennie i nie zawiera tego samego identyfikatora, ale zawiera tę samą datę. Załóżmy również, że chcemy usunąć dane ze źródła dopiero po zapełnieniu agregatu dla danego dnia.
W MySQL, Oracle i Teradata można to zrobić za pomocą:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
W PostgreSQL użyj:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Zasadniczo powoduje to WEJŚCIA WEWNĘTRZNE między źródłem, celem i agregatem. Usunięcie jest wykonywane w źródle, gdy te same identyfikatory istnieją w obiekcie docelowym ORAZ data obecna w systemie docelowym dla tych identyfikatorów istnieje również w agregacji.
Można również napisać to samo zapytanie (na MySQL, Oracle, Teradata) jak:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Jawne sprzężenia mogą być wspomniane w instrukcjach Delete
w niektórych implementacjach RDBMS (np. Oracle, MySQL), ale nie są obsługiwane na wszystkich platformach (np. Teradata ich nie obsługuje)
Porównania można zaprojektować w celu sprawdzania scenariuszy niezgodności zamiast dopasowywania scenariuszy ze wszystkimi stylami składni (patrz NOT EXISTS
poniżej)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )