Sök…


Introduktion

DELETE-satset används för att radera poster från en tabell.

Syntax

  1. DELETE FROM Tablename [WHERE skick] [LIMIT count]

RADERA vissa rader med VAR

Detta raderar alla rader som matchar WHERE kriterierna.

DELETE FROM Employees
WHERE FName = 'John'

RADERA alla rader

Att utelämna en WHERE klausul kommer att radera alla rader från en tabell.

DELETE FROM Employees

Se TRUNCATE- dokumentation för detaljer om hur TRUNCATE-prestanda kan vara bättre eftersom det ignorerar triggers och indexerar och loggar för att bara ta bort data.

TRUNCATE-klausul

Använd detta för att återställa tabellen till det villkor som den skapades. Detta raderar alla rader och återställer värden, t.ex. automatisk inkrement. Det loggar inte heller varje enskild rad radering.

TRUNCATE TABLE Employees

RADERA vissa rader baserade på jämförelser med andra tabeller

Det är möjligt att DELETE data från en tabell om den matchar (eller inte matchar) viss data i andra tabeller.

Låt oss anta att vi vill DELETE data från källa när dess laddas i Target.

DELETE FROM Source
WHERE  EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )

De vanligaste RDBMS-implementeringarna (t.ex. MySQL, Oracle, PostgresSQL, Teradata) gör det möjligt att sammanfoga tabeller under DELETE vilket möjliggör mer komplex jämförelse i en kompakt syntax.

Lägg till komplexitet till det ursprungliga scenariot, låt oss anta att Aggregate är byggt från Target en gång om dagen och innehåller inte samma ID men innehåller samma datum. Låt oss också anta att vi vill ta bort data från källan först efter att aggregatet har fyllts i för dagen.

På MySQL, Oracle och Teradata kan detta göras med:

DELETE FROM Source
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date

I PostgreSQL använder du:

DELETE FROM Source
USING  TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Detta resulterar i huvudsak i INNER JOINS mellan källa, mål och aggregerat. Raderingen utförs på Source när samma ID finns i Mål OCH datum som finns i Mål för dessa ID finns också i Aggregate.

Samma fråga kan också skrivas (på MySQL, Oracle, Teradata) som:

DELETE Source
FROM   Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Explicata anslutningar kan nämnas i Delete uttalanden för vissa RDBMS-implementationer (t.ex. Oracle, MySQL) men stöds inte på alla plattformar (t.ex. Teradata stöder inte dem)

Jämförelser kan utformas för att kontrollera felanpassningsscenarier istället för att matcha dem med alla syntaxstilar (observera NOT EXISTS nedan)

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow