MySQL: как удалить несколько таблиц, используя один запрос? - PullRequest
11 голосов
/ 20 июля 2011

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

Ответы [ 7 ]

15 голосов
/ 16 октября 2012

Я использовал запрос, очень похожий на запрос Ангелины. Если у вас более нескольких таблиц, необходимо увеличить максимальную длину 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;
7 голосов
/ 20 июля 2011

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

mysql> SELECT CONCAT ("DROP TABLE",
GROUP_CONCAT (TABLE_NAME)) AS stmt

FROM information_schema.TABLES

WHERE TABLE_SCHEMA = "your_db_name" И TABLE_NAME НРАВИТСЯ "ur condition" в выходной файл "/tmp/a.txt';

mysql> source /tmp/a.txt;

3 голосов
/ 13 января 2014

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

mysqldump создайте файл, содержащий DROP команду, такую ​​как

DROP TABLE IF EXISTS `wp_matable`;

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

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

mysqldump -u user -p database > dump.sql 
grep "DROP TABLE `wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql
2 голосов
/ 07 марта 2016

Будьте осторожны с «_», перед 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**%';
0 голосов
/ 18 июля 2016

Перейдите в папку c: \ xampp \ mysql \ data \ your folder

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

Спасибо

0 голосов
/ 12 октября 2015

Для отличного решения 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

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

0 голосов
/ 02 сентября 2015

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

DROP TABLE TABLE_NAME;

...