Вы не можете сделать это с помощью только одной команды MySQL, однако вы можете использовать MySQL для создания оператора за вас:
В оболочке MySQL или через PHPMyAdmin используйте следующий запрос
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Это сгенерирует оператор DROP, который вы можете затем скопировать и выполнить, чтобы удалить таблицы.
РЕДАКТИРОВАТЬ: отказ от ответственности здесь - сгенерированный выше оператор удалит все таблицы во всех базах данных с этим префиксом. Если вы хотите ограничить его конкретной базой данных, измените запрос так, чтобы он выглядел так, и замените имя_базы_данных своим собственным именем_базы_данных:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
[...] LIKE 'myprefix\_%';
Некоторые из предыдущих ответов были очень хорошими. Я объединил их идеи с некоторыми идеями из других ответов в Интернете.
Мне нужно было удалить все таблицы, начинающиеся с 'temp_'. После нескольких итераций я придумал этот блок кода:
Надеюсь, это будет полезно другим программистам MySQL / PHP.
источник
скопируйте результаты и вставьте их в текстовый редактор или выведите запрос в файл, воспользуйтесь поиском и заменами, чтобы удалить нежелательное форматирование, и замените
\n
запятой, поставьте;
в конце и добавьте выпадающую таблицу на передний план.вы получите что-то вроде этого:
источник
@ andre-millerРешение хорошее, но есть еще лучшее и немного более профессиональное, которое поможет вам выполнить все за один раз. По-прежнему потребуется более одной команды, но это решение позволит вам использовать SQL для автоматизированных сборок.
Примечание: этот код зависит от платформы, он для MySQL, но наверняка может быть реализован для Postgre, Oracle и MS SQL с небольшими изменениями.
источник
источник
Я успешно удаляю таблицу с помощью запроса на редактирование, чтобы это понравилось
источник
Вы можете сделать это с помощью одной команды MySQL:
Однако вам, вероятно, придется динамически создавать список таблиц в коде.
Альтернативный подход - использовать библиотеку подпрограмм общего назначения для MySQL 5.
источник
Я просто хотел опубликовать точный SQL, который я использовал - это что-то вроде смеси трех основных ответов:
источник
Просто еще одно решение с использованием GROUP_CONCAT, поэтому оно будет выполнять один запрос на удаление, например
DROP TABLE table1, table2, ..
источник
Я обнаружил, что подготовленные операторы было немного сложно заставить меня работать, но настройка
GROUP_CONCAT_MAX_LEN
была необходима, когда у вас много таблиц. Это привело к простому трехэтапному процессу с вырезанием и вставкой из командной строки mysql, который отлично сработал для меня:Затем аккуратно вырежьте и вставьте полученный длинный оператор DROP .
источник
\G
вместо;
дает немного более чистый результат