DROP TABLE (Transact-SQL)
Удаляет одно или больше определений таблиц и все данные, индексы, триггеры, ограничения и разрешения для этих таблиц. Любое представление или хранимая процедура, ссылающаяся на удаленную таблицу, должна быть явно удалена с помощью инструкции DROP VIEW или DROP PROCEDURE. Отчет о зависимостях в таблице можно получить из представления sys.dm_sql_referencing_entities.
Синтаксис
-- Syntax for SQL Server, Azure SQL Database, Warehouse in Microsoft Fabric DROP TABLE [ IF EXISTS ] < database_name.schema_name.table_name | schema_name.table_name | table_name >[ . n ] [ ; ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse DROP TABLE < database_name.schema_name.table_name | schema_name.table_name | table_name >[;]
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
database_name
Имя базы данных, в которой создана таблица.
База данных SQL Azure поддерживает формат трехкомпонентного имени имя_базы_данных.[имя_схемы].имя_объекта, если имя_базы_данных — это текущая база данных или tempdb, а имя_объекта начинается с символа #. База данных SQL Azure не поддерживает четырехкомпонентные имена.
IF EXISTS
Применимо к: SQL Server (SQL Server 2016 (13.x) до текущей версии.
Условное удаление таблицы только в том случае, если она уже существует.
schema_name
Имя схемы, которой принадлежит таблица.
table_name
Имя таблицы, предназначенной для удаления.
Замечания
Инструкцию DROP TABLE нельзя использовать для удаления таблицы, на которую ссылается ограничение FOREIGN KEY. Сначала следует удалить ссылающееся ограничение FOREIGN KEY или ссылающуюся таблицу. Если и ссылающаяся таблица, и таблица, содержащая первичный ключ, удаляются с помощью одной инструкции DROP TABLE, ссылающаяся таблица должна быть первой в списке.
Несколько таблиц можно удалить из любой базы данных. Если удаляемая таблица ссылается на первичный ключ другой таблицы, которая также удаляется, ссылающаяся таблица с внешним ключом должна стоять в списке перед таблицей, содержащей указанный первичный ключ.
При удалении таблицы относящиеся к ней правила и значения по умолчанию теряют привязку, а любые связанные с таблицей ограничения или триггеры автоматически удаляются. Если таблица будет создана заново, нужно будет заново привязать все правила и значения по умолчанию, заново создать триггеры и добавить необходимые ограничения.
При удалении всех строк в таблице с помощью инструкции DELETE tablename или TRUNCATE TABLE таблица продолжает существовать, пока она не будет удалена.
Большие таблицы и индексы, использующие более 128 экстентов, удаляются в два этапа: логически и физически. На логическом этапе существующие единицы распределения, используемые в таблице, отмечаются для освобождения и остаются заблокированными до фиксации транзакции. В физической фазе страницы IAM, помеченные для освобождения, физически удаляются пакетами.
При удалении таблицы, которая содержит столбец VARBINARY(MAX) с атрибутом FILESTREAM, не будут удалены никакие данные, которые хранятся в файловой системе.
При удалении таблицы реестра ее зависимые объекты (таблица журнала и представление реестра) также удаляются. Таблицу журнала или представление реестра нельзя удалить напрямую. При удалении таблиц реестра и их зависимых объектов система применяет семантику обратимого удаления — в действительности они не удаляются, а помечаются как удаленные в представлениях системного каталога и переименовываются. Дополнительные сведения см. в разделе Рекомендации и ограничения для реестра.
Инструкции DROP TABLE и CREATE TABLE нельзя выполнять для одной таблицы в одном пакете. В противном случае может произойти непредвиденная ошибка.
Разрешения
Необходимо разрешение ALTER на схему, к которой принадлежит эта таблица, разрешение CONTROL для этой таблицы или членство в предопределенной роли базы данных db_ddladmin .
Если инструкция предусматривает удаление таблицы реестра, требуется разрешение ALTER LEDGER .
Примеры
А. Удаление таблицы из текущей базы данных
Следующий пример удаляет таблицу ProductVendor1 , ее данные и индексы из текущей базы данных.
DROP TABLE ProductVendor1 ;
B. Удаление таблицы из другой базы данных
Следующий пример удаляет таблицу SalesPerson2 из базы данных AdventureWorks2022 . Пример может быть выполнен из любой базы данных на экземпляре сервера.
DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;
C. Удаление временной таблицы
Следующий пример создает временную таблицу, проверяет ее наличие, удаляет ее и снова проверяет ее наличие. В этом примере не используется синтаксис IF EXISTS, доступный начиная с SQL Server 2016 (13.x).
CREATE TABLE #temptable (col1 INT); GO INSERT INTO #temptable VALUES (10); GO SELECT * FROM #temptable; GO IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL DROP TABLE #temptable; GO --Test the drop. SELECT * FROM #temptable;
D. Удаление таблицы с помощью IF EXISTS
Применимо к: SQL Server (SQL Server 2016 (13.x) до текущей версии.
В следующем примере создается таблица с именем T1. Затем вторая инструкция удаляет таблицу. Третья инструкция не выполняет никаких действий, так как таблица уже удалена, однако это не вызывает ошибку.
CREATE TABLE T1 (Col1 INT); GO DROP TABLE IF EXISTS T1; GO DROP TABLE IF EXISTS T1;
SQL DROP
Используя запрос DROP можно удалить таблицы (TABLE), индексы (INDEX) и базы данных (DATABASE).
DROP TABLE
DROP TABLE, применяемый в базе данных Oracle. Обычно с таблицей в базе данных связано несколько объектов, например индекс, создаваемый первичным ключом, или ограничение UNIQUE, налагаемое на столбцы таблицы. При удалении таблицы Oracle автоматически удаляет и любой связанный с ней индекс. Для удаления таблицы из БД необходимо выполнить команду DROP TABLE:
DROP TABLE Пример 1.
DROP TABLE table;
Однако удалить таблицу не всегда столь просто. В любой момент мы можем создать таблицу с ограничениями целостности. Ограничение целостности (Integrityconstraint ) – это правило, устанавливаемое для таблицы и ограничивающее тип данных, которые можно вводить в эту таблицу. Если попытаться удалить таблицу с ограничениями целостности, возвращается сообщение об ошибке следующего вида: «Unique/primary keys in table referenced by foreign keys» (на уникальные/первичные ключи таблицы ссылаются внешние ключи). Когда существуют ограничения для других таблиц, на которые ссылается удаляемая таблица, можно пользоваться каскадной конструкцией CASCADE CONSTRAINTS:
DROP TABLE. Пример 2
Удаление таблицы с ограничениями целостности:
DROP TABLE table CASCADE CONSTRAINTS;
DROP TABLE, применяемый в mySQL
DROP TABLE. Пример 3
Для удаления таблицы также используется запрос:
DROP TABLE table;
DROP TABLE. Пример 4
В случае, если необходимо установить проверку на существование таблицы при удалении (если существует удалить таблицу) запрос принимает следующий вид:
DROP TABLE IF EXISTS table;
Данный запрос будет выполнен в том случае, если удаляемая таблица существует в базе данных. DROP INDEX Данный запрос DROP INDEX используется для удаления индексов в таблице. DROP INDEX, применяемый в базе данных Oracle: Когда индекс в базе данных больше не нужен, разработчик может удалить его командой DROP INDEX. После удаления индекса эффективность поиска с использованием столбца или столбцов, ограниченных индексом, больше не повышается и упоминание об индексе исчезает из словаря данных. Индекс, применяемый для первичного ключа, удалить нельзя. Синтаксис оператора DROP INDEX одинаков для удаления индекса любого типа (уникальности, битовой карты или В-дерева). Чтобы каким-то образом улучшить индекс, нужно сначала удалить его, а потом создать новый.
DROP INDEX. Пример 1
DROP INDEX my_index;
DROP INDEX, применяемый в mySQL:
DROP INDEX. Пример 2
Для удаления индексов (INDEX) используется запрос:
DROP INDEX my_index ON table;
Данный запрос удаляет индексы, указанные в my_index из таблицы table, но она не работает в версиях MySQL до 3.22. В версиях 3.22 и более поздних используется команда:
ALTER TABLE table_name DROP INDEX index_name;
DROP DATABASE DROP DATABASE. Пример 1
DROP DATABASE database;
Запрос DROP DATABASE удаляет базу данных database.
TRUNCATE TABLE
Запрос TRUNCATE TABLE используется для того, чтобы удалить данные внутри таблицы, тем самым не затрагивая саму таблицу. В нужном случае TRUNCATE TABLE может быть очень полезен. TRUNCATE TABLE, примеры использования TRUNCATE TABLE:
TRUNCATE TABLE. Пример 1
TRUNCATE TABLE table;
DROP SEQUENCE DROP SEQUENCE используется для удаления последовательности.
DROP SEQUENCE. Пример 1
DROP SEQUENCE sequence_name;
DROP SYNONYM DROP SYNONYM используется для удаления синонимов.
DROP SYNONYM. Пример 1
DROP SYNONYM synonym_name;
Для удаления общих синонимов необходимо воспользоваться командой DROP PUBLIC SYNONYM.
DROP SYNONYM. Пример 2
Как удалить таблицу в sql
Перед созданием таблицы необходимо выбрать базу данных, в которую таблица будет записана. Это делается с помощью оператора USE :
MySQLUSE имя_базы_данных;Для создания таблицы используется оператор CREATE TABLE . Его базовый синтаксис имеет следующий вид:
MySQLCREATE TABLE [IF NOT EXIST] имя_таблицы ( столбец_1 тип_данных, [столбец_2 тип_данных,] ... [столбец_n тип_данных,] );Например, создадим таблицу пользователей.
MySQLCREATE TABLE Users ( id INT, name VARCHAR(255), age INT );INT , VARCHAR(255) - типы данных: числовой и строковый соответственно. Более подробно о них можно будет узнать в следующих статьях.
Вышеприведённое определение столбцов в таблице является упрощённым. Помимо названия столбца и его типа в определение иногда необходимо добавлять следующие необязательные параметры:
- PRIMARY KEY Указывает колонку или множество колонок как первичный ключ.
- AUTO_INCREMENT Указывает, что значение данной колонки будет автоматически увеличиваться при добавление новых записей в таблицу. Каждая таблица имеет максимум одну AUTO_INCREMENT колонку. Стоит отметить, что данный параметр можно применять только к целочисленным типам и к типам с плавающей запятой.
- UNIQUE Указывает, что значения в данной колонке для всех записей должны быть отличными друг от друга.
- NOT NULL Указывает, что значения в данной колонке должны быть отличными от NULL .
- DEFAULT Указывает значение по умолчанию. Данный параметр не применяется к типам BLOB , TEXT , GEOMETRY и JSON .
Для нашей таблицы пользователей можно указать следующие параметры:
MySQLCREATE TABLE Users ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL DEFAULT 18 );Так, в данном примере:
- id - поле числового типа, являющееся первичным ключом;
- name - поле строкового типа с максимальной длиной в 255 символов, являющееся обязательным к заполнению;
- age - поле числового типа со значением по умолчанию равным 18.
Для того, чтобы посмотреть описание созданной таблицы можно воспользоваться оператором DESCRIBE .
MySQLDESCRIBE Users;
Field Type Null Key Default Extra id int(11) NO PRI name varchar(255) NO age int(11) NO 18 Помимо описания столбцов, при создании таблицы можно дополнительно указать следующие параметры:
Первичный ключ. Если вы не определили первичный ключ с помощью параметров столбца, то это можно сделать с помощью дополнительных параметров таблицы, добавив запись PRIMARY KEY (, ) после перечисления столбцов:
MySQLCREATE TABLE Users ( id INT, name VARCHAR(255) NOT NULL, age INT NOT NULL DEFAULT 18, PRIMARY KEY (id) );MySQLCREATE TABLE Companies ( id INT, name VARCHAR(255) NOT NULL, PRIMARY KEY (id) );Дальше нужно добавить в таблицу Users поле company – место работы нашего пользователя, которое будет ссылаться на запись в таблице Companies . Полный запрос для создания таблицы будет выглядеть так:
MySQLCREATE TABLE Users ( id INT, name VARCHAR(255) NOT NULL, age INT NOT NULL DEFAULT 18, company INT, PRIMARY KEY (id) );Для того, чтобы при добавлении новых записей в таблицу Users гарантировать, что в колонке company находится идентификатор, существующий в таблице Companies , используется внешний ключ. Он имеет следующий синтаксис:
MySQLFOREIGN KEY (столбец_1>, столбец_n>) REFERENCES внешняя_таблица> (столбец_во_внешней_таблице_1>, столбец_во_внешней_таблице_n>) [ON DELETE действие] [ON UPDATE действие]Полный запрос для создания таблицы с внешним ключом будет таким:
MySQLCREATE TABLE Users ( id INT, name VARCHAR(255) NOT NULL, age INT NOT NULL DEFAULT 18, company INT, PRIMARY KEY (id), FOREIGN KEY (company) REFERENCES Companies (id) );При наличии внешних ключей можно определить поведение текущей записи, при изменении или удалении записи, на которую она ссылается.
MySQLCREATE TABLE Users ( id INT, name VARCHAR(255) NOT NULL, age INT NOT NULL DEFAULT 18, company INT, PRIMARY KEY (id), FOREIGN KEY (company) REFERENCES Companies (id) ON DELETE RESTRICT ON UPDATE CASCADE );ON DELETE RESTRICT означает, что если попробовать удалить компанию, у которой в таблице Users есть данные, база данных не даст этого сделать:
MySQLCannot delete or update a parent row: a foreign key constraint failsУдаление таблицы производится при помощи оператора DROP TABLE .
MySQLDROP TABLE [IF EXIST] имя_таблицы;Как очистить таблицу в MySQL
В статье мы расскажем, как в MySQL очистить таблицу. Мы покажем два способа и объясним разницу между ними.
Очистить таблицу можно при помощи одной из команд:
Разница между TRUNCATE и DELETE
Команда TRUNCATE является оператором DDL. DDL (Data Definition Language) — это язык определения данных. Операторы языка DDL управляют объектами баз данных: удаляют, создают или переименовывают объекты БД.
Команда DELETE является DML-оператором. DML (Data Manipulation Language) — это язык манипуляции данными. Операторы языка DML позволяют вставить, удалить, изменить, извлечь или обновить данные в базе.
Сравним работу команд:
TRUNCATE DELETE Удаляет все данные из таблицы Может удалить часть данных в соответствии с условием WHERE Удаляет все строки из таблицы освобождением страниц Удаляет строки по одной Записывает в журнал транзакций сведения о каждой удалённой странице, а не строке Делает запись в журнал транзакций при удалении каждой строки Работает быстрее Работает медленнее Нужны привилегии ALTER Нужны привилегии DELETE Сбрасывает идентификаторы Не сбрасывает идентификаторы Блокирует таблицу и страницу перед удалением Блокирует строку перед её удалением Выбор команды зависит от конкретного случая. Если нужно удалить некоторые строки по условию, подойдёт только DELETE. Если нужно полностью очистить таблицу и сбросить идентификаторы, используйте TRUNCATE.
Понять разницу между командами и определиться с их выбором поможет таблица с операторами каждого языка:
DDL DML CREATE SELECT ALTER INSERT DROP UPDATE TRUNCATE DELETE COMMENT MERGE RENAME CALL EXPLAIN PLAN LOCK TABLE Таким образом, операторы DDL управляют структурой, а операторы DML — её содержимым.
Как в MySQL очистить таблицу
Подключитесь к серверу по SSH. Затем подключитесь к MySQL при помощи команды:
mysql -u username -p’password’Вместо username введите имя пользователя, вместо password — пароль.
Если вы не знаете пароль, попробуйте войти без него при помощи команды:
mysqlЕсли подключение без пароля не настроено, возникнет ошибка:
В этом случае сбросьте пароль от root-пользователя MySQL по инструкции.
TRUNCATE
TRUNCATE полностью очищает таблицу без возможности указать дополнительные условия. Для этого:
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:TRUNCATE table_name;TRUNCATE позволяет указать название БД и название таблицы в одном запросе. Для этого используйте команду:
TRUNCATE db_name.table_name;Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу.
DELETE
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:DELETE FROM table_name;Вы можете указать название БД и таблицы в одном запросе:
DELETE FROM db_name.table_name;Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу при помощи DELETE.
DELETE позволяет использовать условие WHERE, чтобы удалить некоторые строки из таблицы:
DELETE FROM table_name WHERE condition;
Где condition — это условие.
Пример команды, в котором будут удалены все строки, значение столбца, id которых больше 1000:
DELETE FROM table_name WHERE id > 1000;
Как проверить содержимое таблицы
Если вы хотите убедиться, что в таблице не осталось данных, воспользуйтесь командой:
SELECT * FROM db_name.table_name;Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Если таблица пустая, вывод будет следующим:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь



