Sök…
Introduktion
DELETE-satset används för att radera poster från en tabell.
Syntax
- 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 )