Zum Inhalt springen

DROP-Anweisung

Die DROP-Anweisung entfernt einen zuvor mit dem Befehl CREATE hinzugefügten Katalogeintrag.

Beispiele

Die Tabelle mit dem Namen tbl löschen:

DROP TABLE tbl;

Die Sicht mit dem Namen view1 löschen; keinen Fehler werfen, wenn die Sicht nicht existiert:

DROP VIEW IF EXISTS view1;

Funktion fn löschen:

DROP FUNCTION fn;

Index idx löschen:

DROP INDEX idx;

Schema sch löschen:

DROP SCHEMA sch;

Sequenz seq löschen:

DROP SEQUENCE seq;

Makro mcr löschen:

DROP MACRO mcr;

Makro-Tabelle mt löschen:

DROP MACRO TABLE mt; -- the `TABLE` is optional since v1.4.0

Typ typ löschen:

DROP TYPE typ;

Syntax

Abhängigkeiten gelöschter Objekte

DuckDB führt für einige Objekttypen eine eingeschränkte Abhängigkeitsverfolgung durch. Standardmäßig oder wenn die Klausel RESTRICT angegeben ist, wird der Eintrag nicht gelöscht, wenn andere Objekte von ihm abhängen. Wenn die Klausel CASCADE angegeben ist, werden alle vom Objekt abhängigen Objekte ebenfalls gelöscht.

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema;
Terminal window
Dependency Error:
Cannot drop entry "myschema" because there are entries that depend on it.
table "t1" depends on schema "myschema".
Use DROP...CASCADE to drop all dependents.

Der Modifikator CASCADE löscht sowohl myschema als auch myschema.t1:

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema CASCADE;

Die folgenden Abhängigkeiten werden verfolgt und führen daher zu einem Fehler, wenn der Benutzer das abhängige Objekt ohne den Modifikator CASCADE zu löschen versucht.

Objekt mit Abhängigkeiten Abhängiges Objekt
SCHEMA FUNCTION
SCHEMA MACRO TABLE
SCHEMA MACRO
SCHEMA SCHEMA
SCHEMA SEQUENCE
SCHEMA TABLE
SCHEMA TYPE
SCHEMA VIEW

Einschränkungen

Abhängigkeiten von Sichten

Derzeit werden Abhängigkeiten für Sichten nicht verfolgt. Wird zum Beispiel eine Sicht angelegt, die eine Tabelle referenziert, und die Tabelle gelöscht, befindet sich die Sicht in einem ungültigen Zustand:

CREATE TABLE tbl (i INTEGER);
CREATE VIEW view1 AS
SELECT i FROM tbl;
DROP TABLE tbl RESTRICT;
SELECT * FROM view1;

Das gibt die folgende Fehlermeldung zurück:

Terminal window
Catalog Error:
Table with name tbl does not exist!

Einschränkungen beim Freigeben von Festplattenplatz

Ein ausgeführtes DROP TABLE sollte den von der Tabelle verwendeten Speicher freigeben, aber nicht immer Festplattenplatz. Auch wenn der Festplattenplatz nicht abnimmt, werden die freien Blöcke als free markiert. Haben wir zum Beispiel eine 2-GB-Datei und löschen eine 1-GB-Tabelle, kann die Datei weiterhin 2 GB groß sein, sollte aber 1 GB freie Blöcke enthalten. Um das zu prüfen, verwenden Sie das folgende PRAGMA und prüfen Sie die Anzahl der free_blocks in der Ausgabe:

PRAGMA database_size;

Anleitungen zum Freigeben von Platz nach dem Löschen einer Tabelle finden Sie auf der Seite „Platz freigeben“.