DELETE - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DELETE

Löscht Zeilen aus Tabellen.

Anmerkung

Die maximale Größe für eine einzelne SQL Anweisung beträgt 16 MB.

Syntax

[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] DELETE [ FROM ] { table_name | materialized_view_name } [ { USING } table_name, ... ] [ WHERE condition ]

Parameter

WITH-Klausel

Optionale Klausel, die eine oder mehrere Klausel angibt common-table-expressions. Siehe WITH-Klausel.

FROM

Das FROM Schlüsselwort ist optional, es sei denn, die USING Klausel ist angegeben. Die Anweisungen delete from event; und delete event; sind äquivalente Operationen, die alle Zeilen aus der EVENT Tabelle entfernen.

Anmerkung

Um alle Zeilen in einer Tabelle zu löschen, führen Sie für die Tabelle den Befehl TRUNCATE aus. TRUNCATEist viel effizienter als DELETE und benötigt kein VACUUM ANDANALYZE. Beachten Sie jedoch, dass die TransaktionTRUNCATE, in der sie ausgeführt wird, festgeschrieben wird.

table_name

Eine temporäre oder persistente Tabelle. Nur der Eigentümer der Tabelle oder ein Benutzer mit DELETE Berechtigungen für die Tabelle darf Zeilen aus der Tabelle löschen.

Erwägen Sie, den TRUNCATE Befehl für schnelle unqualifizierte Löschvorgänge bei großen Tabellen zu verwenden; sieheTRUNCATE.

Anmerkung

Nach dem Löschen einer großen Zahl von Zeilen aus einer Tabelle:

  • Führen Sie eine Vacuum-Operation für die Tabelle durch, um Speicherplatz zurückzugewinnen und die Zeilen neu zu sortieren.

  • Analysieren Sie die Tabelle, um Statistiken für den Abfrageplaner zu aktualisieren.

materialized_view_name

Eine materialisierte Ansicht. Die DELETE Anweisung funktioniert in einer materialisierten Ansicht, die für verwendet wird. Streaming-Aufnahme in eine materialisierte Ansicht Nur der Besitzer der materialisierten Ansicht oder ein Benutzer mit DELETE Rechten für die materialisierte Ansicht kann Zeilen aus der materialisierten Ansicht löschen.

Sie können eine materialisierte Ansicht nicht für Streaming-Ingestion mit einer Sicherheitsrichtlinie (RLS) DELETE auf Zeilenebene ausführen, für die dem Benutzer nicht die entsprechende Berechtigung erteilt wurde. IGNORE RLS Es gibt eine Ausnahme: Wenn der Benutzer, der die Funktion ausführt, eine IGNORE RLS Genehmigung erteilt DELETE hat, wird sie erfolgreich ausgeführt. Weitere Informationen finden Sie unter Besitz und Verwaltung von RLS Richtlinien.

USINGTabellenname,...

Das USING Schlüsselwort wird verwendet, um eine Tabellenliste einzuführen, wenn in der WHERE Klauselbedingung auf zusätzliche Tabellen verwiesen wird. Die folgende Anweisung löscht beispielsweise alle Zeilen aus der EVENT Tabelle, die die Join-Bedingung für die SALES Tabellen EVENT und erfüllen. Die SALES Tabelle muss in der FROM Liste explizit benannt werden:

delete from event using sales where event.eventid=sales.eventid;

Wenn Sie den Namen der Zieltabelle in der USING Klausel wiederholen, führt der DELETE Vorgang einen Self-Join aus. Sie können eine Unterabfrage in der WHERE Klausel anstelle der USING Syntax als alternative Methode zum Schreiben derselben Abfrage verwenden.

WHEREZustand

Optionale Klausel, die das Löschen von Zeilen auf die Zeilen einschränkt, die der Bedingung entsprechen. Bei der Bedingung kann es sich beispielsweise um eine Einschränkung für eine Spalte, eine Join-Bedingung oder eine Bedingung auf der Basis eines Abfrageergebnisses handeln. Die Abfrage kann auf andere Tabellen als das Ziel des DELETE Befehls verweisen. Beispielsweise:

delete from t1 where col1 in(select col2 from t2);

Wenn keine Bedingung angegeben wird, werden alle Zeilen in der Tabelle gelöscht.

Beispiele

Löschen Sie alle Zeilen aus der CATEGORY Tabelle:

delete from category;

Löschen Sie Zeilen mit CATID Werten zwischen 0 und 9 aus der CATEGORY Tabelle:

delete from category where catid between 0 and 9;

Löschen Sie Zeilen aus der LISTING Tabelle, deren SELLERID Werte in der SALES Tabelle nicht existieren:

delete from listing where listing.sellerid not in(select sales.sellerid from sales);

Die folgenden beiden Abfragen löschen jeweils eine Zeile aus der CATEGORY Tabelle, basierend auf einer Verknüpfung mit der EVENT Tabelle und einer zusätzlichen Einschränkung für die CATID Spalte:

delete from category using event where event.catid=category.catid and category.catid=9;
delete from category where catid in (select category.catid from category, event where category.catid=event.catid and category.catid=9);

Die folgende Abfrage löscht alle Zeilen aus der mv_cities materialisierten Ansicht. Der hier verwendete Name der materialisierten Ansicht ist ein Beispiel:

delete from mv_cities;