Database
 sql >> база данни >  >> RDS >> Database

SQL DROP TABLE за начинаещи

В SQL, ако искате да премахнете таблица от база данни, трябва да използвате DROP TABLE изявление.

Това унищожава таблицата и всички нейни данни.

Синтаксис

Стандартният синтаксис на SQL е така:

DROP TABLE <table name> <drop behavior>

Къде:

  • <table name> е името на таблицата, която искате да премахнете.
  • <drop behavior> посочва всякакви опции. Те могат да бъдат или CASCADE или RESTRICT .

Някои RDBMS също приемат опция IF EXISTS аргумент, което означава, че няма да върне грешка, ако таблицата не съществува.

Някои RDBMS (като MySQL и MariaDB) също приемат незадължителен TEMPORARY ключова дума, за да се гарантира, че само временните таблици ще бъдат отхвърлени.

Oracle също приема PURGE клауза, която го изчиства от кошчето.

Пример

Ето пример за демонстрация.

DROP TABLE t1;

Изпълнението на този код премахва таблицата, наречена t1 и всички негови данни.

IF EXISTS Клауза

Ето пример за използване на IF EXISTS клауза, за да проверите дали таблицата вече съществува.

DROP TABLE IF EXISTS t1;

Използване на IF EXISTS гарантира, че няма да получим грешка, ако таблицата не съществува.

Ето какво се случва, ако премахнем IF EXISTS от изявлението:

DROP TABLE t1;

Резултат:

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

Това е съобщението, върнато от SQL Server. Вашето съобщение ще зависи от СУБД, която използвате.

Зависими външни ключове и изгледи

Някои RDBMS позволяват по избор RESTRICT или CASCADE ключова дума, която указва какво се случва, ако таблицата има външни ключове или изгледи, които я препращат.

RESTRICT Опция

Ето пример за използване на RESTRICT когато се опитвате да пуснете таблица, която е посочена от външен ключ в друга таблица:

DROP TABLE t1 RESTRICT;

Резултат:

cannot drop table t1 because other objects depend on it

Този пример е направен с помощта на PostgreSQL. RESTRICT е опцията по подразбиране, така че щяхме да получим същия резултат дори ако не бяхме включили RESTRICT ключова дума.

CASCADE Опция

Ето какво се случва, ако преминем към CASCADE когато се опитвате да махнете същата таблица (която се позовава от външен ключ в друга таблица):

DROP TABLE t1 CASCADE;

Резултат:

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

Това свали външния ключ, който препращаше към нашия t1 маса. Външният ключ беше наречен t2_c2_fkey .

Имайте предвид, че не изпусна таблицата, която имаше външния ключ. Изпусна само външния ключ.

Ако целевата таблица (t1 ) е посочен от всякакви изгледи, целият изглед щеше да бъде премахнат.

Не е необходимо да посочвате CASCADE за да премахнете всички индекси, правила, тригери или ограничения, които съществуват за целевата таблица. Те се отхвърлят автоматично, дори когато се използва опцията по подразбиране (RESTRICT ).

MySQL и MariaDB

Някои СУБД (като MySQL и MariaDB) приемат RESTRICT и CASCADE ключови думи, но те не правят нищо. Те са предоставени просто за по-лесна преносимост между СУБД.

Оракул

Oracle има малко по-различен синтаксис, CASCADE CONSTRAINTS , което премахва всички ограничения за референтна цялост, които се отнасят до първични и уникални ключове в изпуснатата таблица.

SQL сървър

SQL Server не поддържа CASCADE или RESTRICT ключови думи. Ако таблицата има някакви зависимости от външни ключове, ще трябва да ги махнете, преди да пуснете таблицата, в противен случай ще получите грешка.

Въпреки това, в SQL Server можете да пуснете таблица, дори ако е препраткана от изглед или съхранена процедура. Следователно, трябва да проверите за такива препратки и изрично да ги пуснете, като използвате DROP VIEW или DROP PROCEDURE .

SQLite

SQLite не поддържа CASCADE или RESTRICT ключови думи.

Ако целевата таблица е препраткана от някакви изгледи, таблицата пак ще бъде изпусната (и изгледът ще остане).

Ако целевата таблица е посочена от външни ключове, резултатът ще зависи от това дали имате активирани външни ключове и ако е така, дали има някакви данни в дъщерната таблица и ако е така, дали външният ключ е дефиниран с ON DELETE CASCADE .

Ако използвате SQLite, вижте SQLite DROP TABLE за пример и обсъждане на отпадане на таблица, която се позовава от външен ключ.

Изхвърлете няколко таблици

Някои RDBMS ви позволяват да изтриете множество таблици от един DROP TABLE изявление.

Пример:

DROP TABLE t11, t12;

RDBMS, които поддържат този синтаксис, включват SQL Server, MySQL, MariaDB и PostgreSQL.

Ако обаче пускате таблица, която е посочена от външен ключ и този външен ключ предотвратява отпадането й, ще трябва да посочите дъщерната таблица преди таблицата-родител.

Например, ако изпълня горния израз в SQL Server, получавам следната грешка:

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

В този случай мога просто да променя реда на таблиците в моя DROP TABLE изявление:

DROP TABLE t12, t11;

Всъщност в този случай получих друга грешка, която ми казва, че t12 не съществува.

Ето какво получих:

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

Това е така, защото, въпреки че предишното изявление не можа да изпусне t11 , всъщност беше успешен при премахването на t12 .

И точно като комедия от грешки, този път успя да изпусне t11 но не и t12 .

Независимо от това и двете таблици вече са отпаднали.

Но ако поръчката е правилна от първия път, трябва да получите съобщение като това:

Commands completed successfully.

ВРЕМЕННАТА ключова дума

Някои RDBMS (като MySQL и MariaDB) приемат TEMPORARY ключова дума.

Той минава между DROP и TABLE , като това:

DROP TEMPORARY TABLE t1;

Използване на TEMPORARY ключова дума ще гарантира, че няма да изпуснете случайно невременна таблица, когато се опитвате да изпуснете временна таблица.

TEMPORARY ключова дума има следните ефекти:

  • Изявлението отпада само TEMPORARY таблици.
  • Изявлението не предизвиква неявно завършване (с помощта на DROP TABLE без TEMPORARY ключова дума автоматично записва текущата активна транзакция).
  • Не са проверени права за достъп. A TEMPORARY таблицата се вижда само със сесията, която я е създала, така че не е необходима проверка.

Клаузата за прочистване

Oracle има опция PURGE клауза, която можете да използвате, ако искате да пуснете таблицата и да освободите пространството, свързано с нея, с една стъпка. Ако посочите PURGE , тогава базата данни не поставя таблицата и зависимите от нея обекти в кошчето.

Това е еквивалентно на първо изпускане на таблицата и след това изчистване от кошчето, но ви позволява да запазите една стъпка в процеса.

Имайте предвид, че ако посочите PURGE , няма да можете да възстановите таблицата.

Ако не посочите PURGE , DROP TABLE операторът не води до освобождаване на пространство обратно в пространството за таблици за използване от други обекти и пространството продължава да се отчита към квотата на потребителя.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преброите броя на редовете в таблица в SQL

  2. Разбийте големите операции за изтриване на парчета

  3. Защо имате нужда от моделиране на данни?

  4. Намаляване на разходите за хостинг на вашата база данни:DigitalOcean срещу AWS срещу Azure

  5. Нови стандартни размери на базата данни на Azure SQL