Database
 sql >> Baza danych >  >> RDS >> Database

SQL DROP TABLE dla początkujących

W SQL, jeśli chcesz usunąć tabelę z bazy danych, musisz użyć DROP TABLE oświadczenie.

To niszczy tabelę i wszystkie jej dane.

Składnia

Standardowa składnia SQL wygląda następująco:

DROP TABLE <table name> <drop behavior>

Gdzie:

  • <table name> to nazwa tabeli, którą chcesz usunąć.
  • <drop behavior> określa wszelkie opcje. Mogą to być CASCADE lub RESTRICT .

Niektóre RDBMS akceptują również opcjonalny IF EXISTS argument, co oznacza, że ​​nie zwróci błędu, jeśli tabela nie istnieje.

Niektóre RDBMS (takie jak MySQL i MariaDB) akceptują również opcjonalny TEMPORARY słowo kluczowe, aby upewnić się, że usuwane są tylko tabele tymczasowe.

Oracle akceptuje również PURGE klauzuli, która usuwa go z kosza.

Przykład

Oto przykład do zademonstrowania.

DROP TABLE t1;

Uruchomienie tego kodu powoduje usunięcie tabeli o nazwie t1 i wszystkie jego dane.

Karta IF EXISTS Klauzula

Oto przykład użycia IF EXISTS klauzula, aby sprawdzić, czy tabela już istnieje.

DROP TABLE IF EXISTS t1;

Używanie IF EXISTS zapewnia, że ​​nie otrzymamy błędu, jeśli tabela nie istnieje.

Oto, co się stanie, jeśli usuniemy IF EXISTS z oświadczenia:

DROP TABLE t1;

Wynik:

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

To jest komunikat zwracany przez SQL Server. Twoja wiadomość będzie zależeć od systemu DBMS, którego używasz.

Zależne klucze obce i widoki

Niektóre RDBMS pozwalają na opcjonalne RESTRICT lub CASCADE słowo kluczowe, które określa, co się stanie, jeśli tabela ma jakiekolwiek klucze obce lub widoki, które się do niej odwołują.

RESTRICT Opcja

Oto przykład użycia RESTRICT podczas próby usunięcia tabeli, do której odwołuje się klucz obcy w innej tabeli:

DROP TABLE t1 RESTRICT;

Wynik:

cannot drop table t1 because other objects depend on it

Ten przykład został wykonany przy użyciu PostgreSQL. RESTRICT jest opcją domyślną, więc otrzymalibyśmy ten sam wynik, nawet gdybyśmy nie uwzględnili RESTRICT słowo kluczowe.

CASCADE Opcja

Oto, co się stanie, jeśli przełączymy się na CASCADE podczas próby usunięcia tej samej tabeli (do której odwołuje się klucz obcy w innej tabeli):

DROP TABLE t1 CASCADE;

Wynik:

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

Spowodowało to usunięcie klucza obcego, który odwoływał się do naszego t1 stół. Klucz obcy nazywał się t2_c2_fkey .

Zauważ, że nie upuścił tabeli zawierającej klucz obcy. Upuścił tylko klucz obcy.

Jeśli tabela docelowa (t1 ) był przywoływany przez dowolne widoki, cały widok zostałby usunięty.

Nie musisz określać CASCADE aby usunąć wszystkie indeksy, reguły, wyzwalacze lub ograniczenia, które istnieją dla tabeli docelowej. Są one usuwane automatycznie, nawet przy użyciu domyślnej opcji (RESTRICT ).

MySQL i MariaDB

Niektóre DBMS (takie jak MySQL i MariaDB) akceptują RESTRICT i CASCADE słowa kluczowe, ale nic nie robią. Są one dostarczane po prostu dla łatwiejszego przenoszenia między DBMS.

Wyrocznia

Oracle ma nieco inną składnię, CASCADE CONSTRAINTS , który usuwa wszystkie ograniczenia integralności referencyjnej, które odnoszą się do kluczy podstawowych i unikalnych w usuniętej tabeli.

Serwer SQL

SQL Server nie obsługuje CASCADE lub RESTRICT słowa kluczowe. Jeśli tabela ma jakiekolwiek zależności kluczy obcych, musisz je usunąć przed usunięciem tabeli, w przeciwnym razie otrzymasz błąd.

Jednak w SQL Server można upuścić tabelę, nawet jeśli odwołuje się do niej widok lub procedura składowana. Dlatego powinieneś sprawdzić, czy nie ma takich odwołań, i jawnie je usunąć za pomocą DROP VIEW lub DROP PROCEDURE .

SQLite

SQLite nie obsługuje CASCADE lub RESTRICT słowa kluczowe.

Jeśli do tabeli docelowej odwołują się jakiekolwiek widoki, tabela nadal zostanie usunięta (a widok pozostanie).

Jeśli do tabeli docelowej odwołują się jakiekolwiek klucze obce, wynik będzie zależał od tego, czy masz włączone klucze obce, a jeśli tak, to czy w tabeli podrzędnej znajdują się jakieś dane, a jeśli tak, to czy klucz obcy jest zdefiniowany za pomocą ON DELETE CASCADE .

Jeśli używasz SQLite, zobacz SQLite DROP TABLE na przykład i omówienie upuszczania tabeli, do której odwołuje się klucz obcy.

Upuść wiele tabel

Niektóre RDBMS umożliwiają upuszczanie wielu tabel z jednej DROP TABLE oświadczenie.

Przykład:

DROP TABLE t11, t12;

Systemy RDBMS obsługujące tę składnię obejmują SQL Server, MySQL, MariaDB i PostgreSQL.

Jeśli jednak usuwasz tabelę, do której odwołuje się klucz obcy, a ten klucz obcy uniemożliwia jej usunięcie, musisz umieścić tabelę podrzędną przed tabelą nadrzędną.

Na przykład, jeśli uruchomię powyższą instrukcję w SQL Server, otrzymuję następujący błąd:

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

W takim przypadku mogę po prostu zmienić kolejność tabel w moim DROP TABLE oświadczenie:

DROP TABLE t12, t11;

Właściwie w tym przypadku pojawił się kolejny błąd z informacją, że t12 nie istnieje.

Oto, co mam:

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

Dzieje się tak, ponieważ chociaż poprzednia instrukcja nie mogła usunąć t11 , w rzeczywistości udało się usunąć t12 .

I tak jak komedia błędów, tym razem udało się wyrzucić t11 ale nie t12 .

Niezależnie od tego obie tabele zostały teraz usunięte.

Ale jeśli za pierwszym razem otrzymasz prawidłowe zamówienie, powinieneś otrzymać wiadomość taką jak ta:

Commands completed successfully.

Tymczasowe słowo kluczowe

Niektóre RDBMS (takie jak MySQL i MariaDB) akceptują TEMPORARY słowo kluczowe.

Przechodzi pomiędzy DROP i TABLE , tak:

DROP TEMPORARY TABLE t1;

Korzystanie z TEMPORARY słowo kluczowe zagwarantuje, że przypadkowo nie upuścisz tabeli tymczasowej podczas próby upuszczenia tabeli tymczasowej.

TEMPORARY słowo kluczowe ma następujące skutki:

  • Oświadczenie odrzuca tylko TEMPORARY stoły.
  • Oświadczenie nie powoduje niejawnego zatwierdzenia (przy użyciu DROP TABLE bez TEMPORARY słowo kluczowe automatycznie zatwierdza bieżącą aktywną transakcję).
  • Żadne prawa dostępu nie są sprawdzane. TEMPORARY tabela jest widoczna tylko w sesji, która ją utworzyła, więc nie jest konieczne sprawdzanie.

Klauzula oczyszczania

Oracle ma opcjonalny PURGE klauzula, której możesz użyć, jeśli chcesz usunąć tabelę i zwolnić miejsce z nią związane w jednym kroku. Jeśli określisz PURGE , baza danych nie umieszcza tabeli i obiektów zależnych od niej w koszu.

Jest to równoważne najpierw upuszczeniu tabeli, a następnie wyczyszczeniu jej z kosza, ale pozwala to zapisać jeden krok w procesie.

Pamiętaj, że jeśli określisz PURGE , nie będziesz w stanie odzyskać stołu.

Jeśli nie określisz PURGE , DROP TABLE instrukcja nie powoduje zwolnienia miejsca z powrotem do obszaru tabel do wykorzystania przez inne obiekty, a miejsce jest nadal wliczane do limitu miejsca użytkownika.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uruchamiają się plany równoległe – część 1

  2. Klauzula SQL ORDER BY dla początkujących

  3. Jak napisać instrukcję CASE w SQL?

  4. Sterownik ODBC Quickbooks

  5. Niespodzianki i założenia dotyczące wydajności:DATEDIFF