Как удалить таблицы в sql
Перейти к содержимому

Как удалить таблицы в sql

  • автор:

Удаление таблицы

Таблицу можно удалить через Data Management или через SQL Editor.

  • Удаление таблицы через Data Management
  • Удаление таблицы через SQL Editor

Удаление таблицы через Data Management

  1. Выберите EI Enterprise Intelligence → Data Lake Insight .
  2. В боковом меню слева выберите Data Management → Databases and Tables .
  3. Нажмите на имя базы данных, которая содержит нужную таблицу. ../_images/s__table-delete-dm-1.jpeg
  4. В строке с нужной таблицей нажмите Drop . ../_images/s__table-delete-dm-2.jpeg
  5. Нажмите ОК . ../_images/s__table-delete-dm-3.jpeg

Удаление таблицы через SQL Editor

  1. Выберите EI Enterprise Intelligence → Data Lake Insight .
  2. В боковом меню слева выберите SQL Editor .
  3. Выберите вкладку Databases и нажмите на имя базы данных, которая содержит нужную таблицу. ../_images/s__table-delete-sqleditor-1.jpeg
  4. В строке с нужной таблицей нажмите на значок Menuи выберите из списка Drop Table . ../_images/s__table-delete-sqleditor-2.jpeg
  5. Нажмите ОК . ../_images/s__table-delete-dm-3.jpeg

Выборка и удаление таблиц по маске

В базе данных есть таблицы с именами вида shablon_4YVC , shablon_6HGFT , shablon_9GGNF и т.д. Как сделать DROP всех таких таблиц, не перечисляя их поименно?
Нужно что-то типа:

DROP TABLE LIKE 'shablon_%' 

Отслеживать
9,644 4 4 золотых знака 35 35 серебряных знаков 72 72 бронзовых знака
задан 22 окт 2014 в 7:16
592 6 6 серебряных знаков 17 17 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

В SQL Server есть такая недокументированная процедура:

 exec sp_MSforeachtable @command1 = 'drop table ?', @whereand = 'and o.name like ''%pattern%'' and xtype=''U''' 

Однако могут помешать внешние ключи, как, впрочем, и при любом другом способе. Так что сначала нужно дропнуть ссылочные ограничения, а потом таблицы.

Отслеживать
ответ дан 22 окт 2014 в 17:12
11.5k 16 16 серебряных знаков 16 16 бронзовых знаков

Вы не указали какую СУБД Вы используете, поэтому приведу пример для MS SQLServer.

Для начала надо получить список таблиц:

SELECT name FROM sys.obejcts WHERE name LIKE '%pattern%' AND type = 'U' --пользовательская таблица 

Затем перебираете все и для каждого генерируете строчку с нужной инструкцией. После чего выполняете эту строку как скрипт. В SQLServer’е для этого можно сделать EXEC(‘. ‘) , но лучше воспользоваться sp_executesql.

Только будьте предельно внимательны при подобных операциях, дабы не грохнуть лишнего.

Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 22 окт 2014 в 7:23
4,202 24 24 серебряных знака 49 49 бронзовых знаков
Microsoft SQL Server 2005
22 окт 2014 в 7:31
@mixerden, судя по MSDN, sp_executesql есть и в 2005-м, так что пробуйте.
22 окт 2014 в 9:04

USE MyTable SELECT CONCAT('DROP TABLE ', name) AS Result_Command -- Объединил текст и имя таблицы FROM sys.objects WHERE name LIKE '%old' -- выбираю таблицы у которых имя оканчивается на "old" and type = 'U' -- выбираю только пользовательские таблицы ORDER BY name -- сортирую результат по именам таблиц для красоты 

В результате получаем строки типа DROP TABLE table1_old

Копируем их в новое окно запроса в начале поставив USE MyTable .

Получим что то вроде:

USE MyTable DROP TABLE table1_old DROP TABLE table2_old DROP TABLE table999_old 

Очистка базы данных от документов и задач

Часто возникает необходимость почистить базу данных от документов и задач. Например, когда ее надо кому-нибудь передать или сделать небольшую базу разработки. Но во-первых, не у всех под рукой список таблиц, которые нужно очищать. Во-вторых, многие забывают, что удалять шаблоны и макеты из базы данных не стоит. В третьих, чистить таблицы при помощи delete не всегда оптимально, а не полная чистка таблиц при помощи truncate может вызвать затруднения, т.к. требует использования динамического SQL. Поэтому представляю вашему вниманию SQL-скрипт удаления документов, задач и заданий.

Скрипт работает на SQL 2005, на 2000 потребуются некоторые изменения в части обращения к системным таблицам сервера. Версии DIRECTUM 4.5 — 4.8.

Разумеется, если требуется уменьшить физический размер базы данных, то получившееся в результате выполнения скрипта свободное место в БД нужно освободить командой Shrink.

-- Удалить временные таблицы, если они есть if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDoc') and type in (N'U')) drop table tmpSBEDoc if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDocVer') and type in (N'U')) drop table tmpSBEDocVer if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDocAcc') and type in (N'U')) drop table tmpSBEDocAcc -- Удалить карточки документов кроме шаблонов и макетов declare @DocumentModelsCardTypeID int declare @TemplatesCardTypeID int select @DocumentModelsCardTypeID = TypeID from SBEDocTypes where Code = 'DocumentModels' select @TemplatesCardTypeID = TypeID from SBEDocTypes where Code = 'ШАД' select * into tmpSBEDoc from SBEDoc where (TypeID = @DocumentModelsCardTypeID) or (TypeID = @TemplatesCardTypeID) alter table tmpSBEDoc drop column timestamp declare @ColumnList varchar(2000) select @ColumnList = COALESCE(@ColumnList + ', ', '') + column_name from information_schema.columns where table_name = 'SBEDoc' and column_name <> 'timestamp' order by ordinal_position alter table SBEDoc disable trigger all set identity_insert SBEDoc on truncate table SBEDoc exec('insert into SBEDoc (' + @ColumnList +') select * from tmpSBEDoc') set identity_insert SBEDoc off alter table SBEDoc enable trigger all -- Удалить версии документов кроме шаблонов и макетов select * into tmpSBEDocVer from SBEDocVer where (TypeID = @DocumentModelsCardTypeID) or (TypeID = @TemplatesCardTypeID) alter table tmpSBEDocVer drop column timestamp select @ColumnList = NULL select @ColumnList = COALESCE(@ColumnList + ', ', '') + column_name from information_schema.columns where table_name = 'SBEDocVer' and column_name <> 'timestamp' order by ordinal_position alter table SBEDocVer disable trigger all set identity_insert SBEDocVer on truncate table SBEDocVer exec('insert into SBEDocVer (' + @ColumnList +') select * from tmpSBEDocVer') set identity_insert SBEDocVer off alter table SBEDocVer enable trigger all -- Удалить права доступа на документы кроме шаблонов и макетов select * into tmpSBEDocAcc from SBEDocAcc where (TypeID = @DocumentModelsCardTypeID) or (TypeID = @TemplatesCardTypeID) alter table tmpSBEDocAcc drop column timestamp select @ColumnList = NULL select @ColumnList = COALESCE(@ColumnList + ', ', '') + column_name from information_schema.columns where table_name = 'SBEDocAcc' and column_name <> 'timestamp' order by ordinal_position alter table SBEDocAcc disable trigger all set identity_insert SBEDocAcc on truncate table SBEDocAcc exec('insert into SBEDocAcc (' + @ColumnList +') select * from tmpSBEDocAcc') set identity_insert SBEDocAcc off alter table SBEDocAcc enable trigger all -- Удалить связи документов, задач и заданий delete from SBLinks where DestType = 'E' or SourceType = 'E' or DestType = 'T' or DestType = 'J' -- Удалить подписи документов truncate table SBEDocSignature -- Удалить историю truncate table SBEDocProtocol truncate table SBTaskProtocol truncate table XProtokol -- Удалить все задачи и задания truncate table SBTask truncate table SBTaskJob truncate table SBTaskAcc truncate table SBTaskAttach truncate table SBTaskText truncate table SBTaskRoute truncate table SBTaskObserv truncate table SBTaskSignature truncate table SBWorkflowProcessing -- Удалить временные таблицы if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDoc') and type in (N'U')) drop table tmpSBEDoc if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDocVer') and type in (N'U')) drop table tmpSBEDocVer if exists (select * from sys.objects where object_id = object_id(N'tmpSBEDocAcc') and type in (N'U')) drop table tmpSBEDocAcc

Удаление данных в SQL

Для удаления записей из таблиц в MySQL существует две команды:

Команда TRUNCATE имеет следующий синтаксис:

TRUNCATE TABLE имя_таблицы;

Если нужно полностью очистить таблицу tovar, то следует выполнить команду:

TRUNCATE TABLE tovar;

Команда TRUNCATE позволяет очистить таблицу сразу и полностью и не позволяет удалять отдельные строки, удовлетворяющие каким-либо условиям.

Команда DELETE удаляет из таблицы записи, удовлетворяющие некоторому условию. Она выполняет удаление двух видов:

  • Удаление из одной таблицы;
  • Каскадное удаление из нескольких таблиц.

Удаление из одной таблицы

DELETE [LOW_PRIORITY | QUICK] FROM имя_таблицы

 [WHERE условие ] [ORDER BY . ] [LIMIT число_записей]; 

Статья: Удаление данных в SQL

Поможем написать реферат за 48 часов

  • Если указана инструкция LOW_PRIORITY, то удаление не произойдет, пока все пользователи не завершат чтение таблицы.
  • Инструкция QUICK запрещает объединять индексы при выполнении удаления. Это несколько ускоряет процесс удаления.
  • Инструкция ORDER BY позволяет упорядочить записи перед удалением. Сама по себе эта опция не имеет смысла. Ее полезно использовать в сочетании с инструкцией LIMIT.
  • Инструкция LIMIT задает количество удаляемых записей.

Для удаления из таблицы tovar всех товаров, которые имеют цену выше 300р. Нужно выполнить команду:

DELETE FROM Tovar WHERE price>300;

Если в таблице Tovar присутствует поле timestamp, которое хранит время добавления каждой записи, то можно удалить самый старый товар с ценой больше 300р.:

DELETE FROM Tovar WHERE price>300 ORDER BY timestamp LIMIT (1);

«Удаление данных в SQL» ��
Готовые курсовые работы и рефераты
Решение задач по учебе за 24 часа
Реферат по этой теме за 48 часов

Каскадное удаление

При каскадном удалении удаляется не только основная запись, но и записи из других таблиц, содержащие внешний ключ основной записи. В MySQL существует два вида таблиц:

  • InnoDB, которые поддерживают механизм связи по внешним ключам.
  • MyISAM, которые не поддерживают механизма связи по внешним ключам. В этом случае все связи хранятся исключительно в памяти администратора базы данных и программистов.

Для таблиц InnoDB при построении внешнего ключа всегда описывается реакция СУБД на удаление связанных записей. Реакция может быть трех видов:

  • RESTRICT – ограничение;
  • CASCADE – каскадное удаление;
  • SET NULL – установить значение NULL вместо значений удаленного внешнего ключа.

Пусть имеется таблица tovar, содержащая внешний ключ — categ со ссылкой на таблицу category.

Таким образом, каждый товар относится к определенной категории:

Необходимо удалить категорию «Лакокрасочные» из таблицы category и каскадно удалить все связанные с ней записи из таблицы tovar. Если во время создания внешнего ключа categ была указана реакция CASCADE при удалении, то для решения задачи достаточно выполнить команду:

DELETE FROM category WHERE category.categ_name=”лакокрасочные”;

Все товары, относящиеся к категории «лакокрасочные» автоматически удалятся из связанной таблицы tovar.

Однако, если пользователь работает с таблицами MyIsam, то СУБД не знает ни о каких внешних ключах и каскадного удаления не произойдет. В этом случае пригодятся специальные формы команды DELETE, предназначенные для каскадного удаления:

DELETE [LOW_PRIORITY | QUICK] имя_таблицы [ ,имя_таблицы . ]

FROM таблица_ссылка [WHERE условие] 

DELETE [LOW_PRIORITY | QUICK]

 FROM имя_таблицы, [имя_таблицы . ] USING таблица_ссылка [WHERE условие] 

Задачу из примера 4 можно решить двумя эквивалентными командами:

DELETE tovar, category FROM tovar join category on category.itcateg=tovar.categ where category.name_categ=”Лакокрасочные”;

DELETE from tovar, category using tovar join category on category.itcateg=tovar.categ where category.name_categ=”Лакокрасочные”;

Замечание 1

На первый взгляд кажется, что команды

TRUNCATE имя_таблицы;

DELETE FROM имя_таблицы;

совершенно эквивалентны. Действительно, они обе полностью очищают таблицу от всех записей. Однако, разница все же есть.

Если используется TRUNCATE, то удаляются сразу все записи и при повторном заполнении таблицы поля с автоинкрементом получат значения начиная с 1. Если используется DELETE, то удаление происходит по одной записи и при повторном заполнении таблицы поля с автоинкрементом получат значение на 1 больше последнего удаленного значения (то есть автоинкрементирование продолжится).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *