Удаление таблицы
Таблицу можно удалить через Data Management или через SQL Editor.
- Удаление таблицы через Data Management
- Удаление таблицы через SQL Editor
Удаление таблицы через Data Management
- Выберите EI Enterprise Intelligence → Data Lake Insight .
- В боковом меню слева выберите Data Management → Databases and Tables .
- Нажмите на имя базы данных, которая содержит нужную таблицу.

- В строке с нужной таблицей нажмите Drop .

- Нажмите ОК .

Удаление таблицы через SQL Editor
- Выберите EI Enterprise Intelligence → Data Lake Insight .
- В боковом меню слева выберите SQL Editor .
- Выберите вкладку Databases и нажмите на имя базы данных, которая содержит нужную таблицу.

- В строке с нужной таблицей нажмите на значок
и выберите из списка Drop Table . 
- Нажмите ОК .

Выборка и удаление таблиц по маске
В базе данных есть таблицы с именами вида 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 больше последнего удаленного значения (то есть автоинкрементирование продолжится).