DROP TABLE

Entfernt eine Tabelle aus dem aktuellen oder angegebenen Schema, behält aber eine Version der Tabelle bei, sodass sie mit UNDROP TABLE wiederhergestellt werden kann. Weitere Informationen finden Sie unter Nutzungshinweise.

Siehe auch:

CREATE TABLE, ALTER TABLE, SHOW TABLES, TRUNCATE TABLE, DESCRIBE TABLE

Syntax

DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
Copy

Parameter

name

Gibt den Bezeichner für die zu löschende Tabelle an. Wenn der Bezeichner Leerzeichen, Sonderzeichen oder Zeichen in Groß-/Kleinschreibung enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen eingeschlossen werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten (z. B. "My Object").

Wenn der Tabellenbezeichner nicht vollqualifiziert ist (in der Form db_name.schema_name.table_name oder schema_name.table_name), sucht der Befehl die Tabelle im aktuellen Schema der Sitzung.

CASCADE | RESTRICT

Gibt an, ob die Tabelle gelöscht werden kann, wenn Fremdschlüssel existieren, die auf die Tabelle verweisen:

  • CASCADE: Entfernt die Tabelle, auch wenn sie Unique- oder Primärschlüssel hat, die von Fremdschlüsseln in anderen Tabellen referenziert werden.

  • RESTRICT: Gibt eine Warnung über bestehende Fremdschlüsselreferenzen zurück und entfernt die Tabelle nicht.

Standard: CASCADE für Standardtabellen; RESTRICT für Hybridtabellen. Siehe auch Löschen von Hybridtabellen.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

OWNERSHIP

Tabelle

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Das Löschen einer Tabelle entfernt diese nicht dauerhaft aus dem System. Eine Version der entfernten Tabelle wird in Time Travel für die Anzahl der Tagen gespeichert, die durch die Datenaufbewahrungsfrist für die Tabelle angegeben ist:

    • Innerhalb der Time Travel-Aufbewahrungsfrist können Sie eine gelöschte Tabelle mit dem Befehl UNDROP TABLE wiederherstellen.

    • Das Ändern der Time Travel-Aufbewahrungsfrist für das Konto oder für ein übergeordnetes Objekt (eine Datenbank oder Schema) nachdem Sie eine Tabelle löschen führt nicht dazu, dass die Time Travel-Aufbewahrungsfrist für die gelöschte Tabelle geändert wird. Weitere Informationen dazu finden Sie im entsprechenden Hinweis unter dem Time Travel-Thema.

    • Wenn die Aufbewahrungsfrist für Time Travel endet, hängt der nächste Status der gelöschten Tabelle davon ab, ob sie permanent, transient oder temporär ist:

      • Eine permanente Tabelle wird nach Fail-safe verschoben. Eine gelöschte Tabelle in Fail-safe (7 Tage) kann wiederhergestellt werden, allerdings nur von Snowflake. Wenn die Tabelle Fail-safe verlässt, wird sie bereinigt.

      • Eine transiente oder temporäre Tabelle hat kein Fail-safe, sodass sie bereinigt wird, wenn sie aus Time Travel verschoben wird.

        Bemerkung

        Eine Time Travel-Abfrage mit langer Laufzeit verzögert das Verschieben von Daten und Objekte (Tabellen, Schemas und Datenbanken) im Konto in den Fail-safe-Bereich, bis die Abfrage abgeschlossen ist. Das Bereinigen von temporären und transienten Tabellen wird auf die gleiche Weise verzögert.

      • Nachdem eine gelöschte Tabelle bereinigt wurde, kann sie nicht wiederhergestellt werden. Sie muss neu erstellt werden.

  • Nach Sie eine Tabelle entfernen wird durch das Erstellen einer Tabelle mit dem gleichen Namen eine neue Version der Tabelle angelegt. Sie können die gelöschte Version der vorherigen Tabelle immer noch wiederherstellen, indem Sie folgende Schritte ausführen:

    1. Benennen Sie die aktuelle Version der Tabelle um.

    2. Verwenden Sie den Befehl UNDROP TABLE, um die vorherige Version der Tabelle wiederherzustellen.

  • Bevor Sie eine Tabelle entfernen, vergewissern Sie sich, dass keine Ansichten auf die Tabelle verweisen. Durch das Löschen einer Tabelle, auf die eine Ansicht verweist, wird diese Ansicht ungültig (also Abfragen auf die Ansicht geben den Fehler „Objekt existiert nicht“ zurück).

  • Um eine Tabelle zu löschen, müssen Sie eine Rolle verwenden, die die OWNERSHIP-Berechtigung für die Tabelle hat.

  • Wenn die IF EXISTS-Klausel angegeben ist und das Zielobjekt nicht vorhanden ist, wird der Befehl erfolgreich abgeschlossen, ohne dass ein Fehler zurückgegeben wird.

Löschen von Hybridtabellen

Wenn Sie eine Hybridtabelle löschen, ohne die Option RESTRICT oder CASCADE anzugeben, und die Hybridtabelle eine Primärschlüssel/Fremdschlüssel- oder Eindeutiger Schlüssel/Fremdschlüssel-Beziehung zu einer anderen Tabelle hat, wird der DROP TABLE-Befehl mit einem Fehler fehlschlagen. Das Standardverhalten ist RESTRICT.

Beispiel:

CREATE OR REPLACE HYBRID TABLE ht1(
  col1 NUMBER(38,0) NOT NULL,
  col2 NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht1 PRIMARY KEY (col1, col2));

CREATE OR REPLACE HYBRID TABLE ht2(
  cola NUMBER(38,0) NOT NULL,
  colb NUMBER(38,0) NOT NULL,
  colc NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht2 PRIMARY KEY (cola),
  CONSTRAINT fkey_ht1 FOREIGN KEY (colb, colc) REFERENCES ht1(col1,col2));

DROP TABLE ht1;
Copy
SQL compilation error:
Cannot drop the table because of dependencies

Der Befehl DROP TABLE schlägt in diesem Fall fehl. Falls erforderlich, können Sie das Standardverhalten außer Kraft setzen, indem Sie CASCADE im Befehl DROP TABLE angeben.

DROP TABLE ht1 CASCADE;
Copy

Alternativ könnten Sie in diesem Fall zuerst die abhängige Tabelle ht2 und dann die Tabelle ht1 löschen.

Beispiele

Entfernen Sie eine Tabelle:

SHOW TABLES LIKE 't2%';

+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| created_on                      | name | database_name | schema_name | kind      | comment    | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| Tue, 17 Mar 2015 16:48:16 -0700 | T2   | TESTDB        | PUBLIC      | TABLE     |            |            |    5 | 4096  | PUBLIC       |              1 |
+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+

DROP TABLE t2;

+--------------------------+
| status                   |
|--------------------------|
| T2 successfully dropped. |
+--------------------------+

SHOW TABLES LIKE 't2%';

+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
|------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------|
+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
Copy

Löschen Sie die Tabelle wieder, aber ohne Fehlermeldung, wenn die Tabelle nicht existiert:

DROP TABLE IF EXISTS t2;

+------------------------------------------------------------+
| status                                                     |
|------------------------------------------------------------|
| Drop statement executed successfully (T2 already dropped). |
+------------------------------------------------------------+
Copy