Szukaj…


Wprowadzenie

Instrukcja DELETE służy do usuwania rekordów z tabeli.

Składnia

  1. 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 )


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow