Database
 sql >> Datenbank >  >> RDS >> Database

SQL DROP TABLE für Anfänger

Wenn Sie in SQL eine Tabelle aus einer Datenbank entfernen möchten, müssen Sie DROP TABLE verwenden Erklärung.

Das zerstört die Tabelle und alle ihre Daten.

Syntax

Die SQL-Standardsyntax lautet wie folgt:

DROP TABLE <table name> <drop behavior>

Wo:

  • ist der Name der Tabelle, die Sie löschen möchten.
  • gibt alle Optionen an. Diese können entweder CASCADE sein oder EINSCHRÄNKT .

Einige RDBMSs akzeptieren auch einen optionalen IF EXISTS Argument, was bedeutet, dass es keinen Fehler zurückgibt, wenn die Tabelle nicht existiert.

Einige RDBMS (wie MySQL und MariaDB) akzeptieren auch einen optionalen TEMPORARY Schlüsselwort, um sicherzustellen, dass nur temporäre Tabellen gelöscht werden.

Oracle akzeptiert auch ein PURGE Klausel, die es aus dem Papierkorb löscht.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

DROP TABLE t1;

Das Ausführen dieses Codes löscht die Tabelle namens t1 und all seine Daten.

Der IF EXISTS Klausel

Hier ist ein Beispiel für die Verwendung von IF EXISTS -Klausel, um zu prüfen, ob die Tabelle bereits existiert.

DROP TABLE IF EXISTS t1;

Verwenden von IF EXISTS stellt sicher, dass wir keinen Fehler erhalten, wenn die Tabelle nicht existiert.

Folgendes passiert, wenn wir IF EXISTS entfernen aus der Anweisung:

DROP TABLE t1;

Ergebnis:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Das ist die Nachricht, die von SQL Server zurückgegeben wird. Ihre Nachricht hängt von dem DBMS ab, das Sie verwenden.

Abhängige Fremdschlüssel und Ansichten

Einige RDBMSs erlauben ein optionales RESTRICT oder KASKADE Schlüsselwort, das angibt, was passiert, wenn die Tabelle Fremdschlüssel oder Ansichten enthält, die darauf verweisen.

Das RESTRICT Möglichkeit

Hier ist ein Beispiel für die Verwendung von RESTRICT beim Versuch, eine Tabelle zu löschen, die von einem Fremdschlüssel in einer anderen Tabelle referenziert wird:

DROP TABLE t1 RESTRICT;

Ergebnis:

cannot drop table t1 because other objects depend on it

Dieses Beispiel wurde mit PostgreSQL erstellt. EINSCHRÄNKUNG ist die Standardoption, sodass wir dasselbe Ergebnis erhalten hätten, selbst wenn wir RESTRICT nicht eingefügt hätten Schlüsselwort.

Die KASKADE Möglichkeit

Folgendes passiert, wenn wir zu CASCADE wechseln beim Versuch, dieselbe Tabelle zu löschen (die von einem Fremdschlüssel in einer anderen Tabelle referenziert wird):

DROP TABLE t1 CASCADE;

Ergebnis:

NOTICE:  drop cascades to constraint t2_c2_fkey on table t2
Commands completed successfully

Dadurch wurde der Fremdschlüssel gelöscht, der auf unseren t1 verwies Tisch. Der Fremdschlüssel hieß t2_c2_fkey .

Beachten Sie, dass die Tabelle mit dem Fremdschlüssel nicht gelöscht wurde. Es hat nur den Fremdschlüssel gelöscht.

Wenn die Zieltabelle (t1 ) von Ansichten referenziert wurde, wäre die gesamte Ansicht gelöscht worden.

Sie müssen CASCADE nicht angeben um alle Indizes, Regeln, Trigger oder Einschränkungen zu löschen, die für die Zieltabelle vorhanden sind. Diese werden automatisch gelöscht, auch wenn die Standardoption (RESTRICT ).

MySQL und MariaDB

Einige DBMS (wie MySQL und MariaDB) akzeptieren RESTRICT und KASKADE Schlüsselwörter, aber sie tun nichts. Sie werden lediglich zur leichteren Portabilität zwischen DBMSs bereitgestellt.

Orakel

Oracle hat eine etwas andere Syntax, CASCADE CONSTRAINTS , wodurch alle referenziellen Integritätsbedingungen gelöscht werden, die sich auf Primärschlüssel und eindeutige Schlüssel in der gelöschten Tabelle beziehen.

SQL-Server

SQL Server unterstützt CASCADE nicht oder EINSCHRÄNKT Schlüsselwörter. Wenn die Tabelle Fremdschlüsselabhängigkeiten hat, müssen Sie diese löschen, bevor Sie die Tabelle löschen, andernfalls erhalten Sie eine Fehlermeldung.

In SQL Server können Sie jedoch eine Tabelle löschen, selbst wenn sie von einer Ansicht oder einer gespeicherten Prozedur referenziert wird. Daher sollten Sie nach solchen Verweisen suchen und sie explizit löschen, indem Sie DROP VIEW verwenden oder DROP PROCEDURE .

SQLite

SQLite unterstützt den CASCADE nicht oder EINSCHRÄNKT Schlüsselwörter.

Wenn die Zieltabelle von Ansichten referenziert wird, wird die Tabelle trotzdem gelöscht (und die Ansicht bleibt bestehen).

Wenn die Zieltabelle von Fremdschlüsseln referenziert wird, hängt das Ergebnis davon ab, ob Sie Fremdschlüssel aktiviert haben, und wenn ja, ob Daten in der untergeordneten Tabelle vorhanden sind, und wenn ja, ob der Fremdschlüssel mit ON CASCADE LÖSCHEN .

Wenn Sie SQLite verwenden, siehe SQLite DROP TABLE für ein Beispiel und eine Diskussion zum Löschen einer Tabelle, auf die von einem Fremdschlüssel verwiesen wird.

Mehrere Tabellen löschen

Einige RDBMSs ermöglichen es Ihnen, mehrere Tabellen aus einer einzigen DROP TABLE zu löschen Erklärung.

Beispiel:

DROP TABLE t11, t12;

Zu den RDBMS, die diese Syntax unterstützen, gehören SQL Server, MySQL, MariaDB und PostgreSQL.

Wenn Sie jedoch eine Tabelle löschen, auf die von einem Fremdschlüssel verwiesen wird, und dieser Fremdschlüssel verhindert, dass sie gelöscht wird, müssen Sie die untergeordnete Tabelle vor der übergeordneten Tabelle auflisten.

Wenn ich beispielsweise die obige Anweisung in SQL Server ausführe, erhalte ich die folgende Fehlermeldung:

Msg 3726, Level 16, State 1, Line 1
Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.

In diesem Fall kann ich einfach die Reihenfolge der Tabellen in meiner DROP TABLE ändern Aussage:

DROP TABLE t12, t11;

Tatsächlich habe ich in diesem Fall einen weiteren Fehler erhalten, der mir mitteilt, dass t12 existiert nicht.

Hier ist, was ich habe:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't12', because it does not exist or you do not have permission.

Dies liegt daran, obwohl die vorherige Anweisung t11 nicht löschen konnte , war es tatsächlich erfolgreich beim Löschen von t12 .

Und genau wie eine Komödie der Fehler konnte es dieses Mal t11 fallen lassen aber nicht t12 .

Unabhängig davon wurden beide Tabellen jetzt gelöscht.

Aber wenn Sie die Bestellung beim ersten Mal richtig machen, sollten Sie eine Nachricht wie diese erhalten:

Commands completed successfully.

Das TEMPORARY-Schlüsselwort

Einige RDBMS (wie MySQL und MariaDB) akzeptieren einen TEMPORARY Schlüsselwort.

Es geht zwischen DROP und TABLE , etwa so:

DROP TEMPORARY TABLE t1;

Mit dem TEMPORARY Schlüsselwort stellt sicher, dass Sie nicht versehentlich eine nicht-temporäre Tabelle löschen, wenn Sie versuchen, eine temporäre Tabelle zu löschen.

Der TEMPORARY Schlüsselwort hat die folgenden Auswirkungen:

  • Die Anweisung löscht nur TEMPORARY Tabellen.
  • Die Anweisung verursacht kein implizites Commit (unter Verwendung von DROP TABLE ohne den TEMPORARY Schlüsselwort schreibt automatisch die aktuelle aktive Transaktion fest).
  • Es werden keine Zugriffsrechte geprüft. Ein TEMPORARY Die Tabelle ist nur in der Sitzung sichtbar, in der sie erstellt wurde, daher ist keine Überprüfung erforderlich.

Die Löschklausel

Oracle hat ein optionales PURGE -Klausel, die Sie verwenden können, wenn Sie die Tabelle löschen und den ihr zugeordneten Speicherplatz in einem einzigen Schritt freigeben möchten. Wenn Sie PURGE angeben , platziert die Datenbank die Tabelle und ihre abhängigen Objekte nicht im Papierkorb.

Dies ist gleichbedeutend damit, die Tabelle zuerst zu löschen und sie dann aus dem Papierkorb zu löschen, aber Sie sparen einen Schritt in diesem Prozess.

Beachten Sie, dass, wenn Sie PURGE angeben , können Sie die Tabelle nicht wiederherstellen.

Wenn Sie PURGE nicht angeben , das DROP TABELLE -Anweisung führt nicht dazu, dass Speicherplatz für die Verwendung durch andere Objekte an den Tablespace zurückgegeben wird, und der Speicherplatz wird weiterhin auf das Speicherplatzkontingent des Benutzers angerechnet.