MySQL: как удалить несколько таблиц с помощью одного запроса?

Я хочу легко удалить несколько таблиц, не перечисляя имена таблиц в запросе на удаление, а удаляемые таблицы имеют префикс "wp_"

7 ответов


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

- Это мои 10 копеек:

-- Increase memory to avoid truncating string, adjust according to your needs
SET group_concat_max_len = 1024 * 1024 * 10;
-- Generate drop command and assign to variable
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE 'my_table%';
-- Drop tables
PREPARE str FROM @dropcmd; EXECUTE str; DEALLOCATE PREPARE str;

просто поделиться одним из решений:

mysql> выберите CONCAT( "DROP TABLE",
GROUP_CONCAT(ИМЯ ТАБЛИЦЫ) ) В качестве инструкции

из базы данных information_schema.Таблицы

где TABLE_SCHEMA = "your_db_name" и TABLE_NAME как " ur состояние" в outfile '/tmp/a.txt';

mysql> источник /tmp/a.txt;


простое решение без риска ошибки:

mysqldump создайте файл, содержащий как

DROP TABLE IF EXISTS `wp_matable`;

a'grep' С "DROP TABLE wp_ " дайте нам команды для выполнения

так что падение производится тезисы trhee линий (вы можете изменить.sql, чтобы проверить, какие таблицы будут удалены раньше)

mysqldump -u user -p database > dump.sql 
grep "DROP TABLE `wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql

будьте осторожны с"_", Нужно писать с " \ " Раньше в Mysql, как:

SELECT CONCAT('DROP TABLE',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE '**my\_table**%';

для великого решения mysqldump лучше использовать опцию --skip-quote-names

mysqldump --skip-quote-names -u user -p database > dump.sql 
grep "DROP TABLE wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql

вы избавляетесь от backticks в именах таблиц. Часть grep не будет работать в некоторых средах с backticks.


удаление одной таблицы в mysql:

DROP TABLE ИМЯ_ТАБЛИЦЫ;


перейти к c:\xampp\mysql\data\your папка

выбрать несколько таблиц, которые вы хотите удалить, а затем нажмите кнопку Удалить

спасибо