У меня есть 100 таблиц в моей базе данных, я хочу сохранить их только.Все таблицы за исключением одного в MySql
Я пытался что-то вроде ниже запроса:
DROP ALL TABLES EXCEPT my_table
Но это, кажется, не существует. Есть идеи?
У меня есть 100 таблиц в моей базе данных, я хочу сохранить их только.Все таблицы за исключением одного в MySql
Я пытался что-то вроде ниже запроса:
DROP ALL TABLES EXCEPT my_table
Но это, кажется, не существует. Есть идеи?
Вы можете построить DROP TABLE заявление с несколькими перечисленных таблиц и выполнить запрос с использованием MySQL подготовленных операторов -
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables
WHERE table_schema = 'Database1' AND table_name <> 'my_table';
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
Вы не можете удалить несколько таблиц в MySQL.
Проще всего в вашем случае было бы экспортировать таблицу, которую вы хотите сохранить (используя такой инструмент, как mysqldump
), затем отбросьте и заново создайте базу данных.
Моя таблица настолько велика, что я не хочу, чтобы экспортировать , Тогда было бы легче сбросить каждый стол в одиночку. – ARMAGEDDON
Тогда вы должны взглянуть на этот вопрос: http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 –
Вы можете построить все заявления падения выводить их информационный файл и использовать файл после этого
SELECT CONCAT('DROP TABLE ', table_name , ';') AS statement FROM information_schema.tables WHERE table_name not like 'table_to_keep' and table_schema like 'your_schema' into outfile 'path_to_file;
source path_to_file;
Интересно, почему никто не предложил поехать в каталог:
C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\...
и удалить их легко ли? это то, что я сделал, и кажется, работает
Это сработало бы, если бы все таблицы были таблицами MyISAM. Если в базе данных есть таблицы InnoDB, тогда это было бы не так просто ... – GregD
Вы можете использовать mysqldump
, попробуйте!
mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] |
grep ^DROP |
grep -v 'my_table' |
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
Если у вас много таблиц, обратите внимание на усечение функцией GROUP_CONCAT. Он имеет настройки для максимальной длины возвращаемой строки: group_concat_max_len
См: GROUP_CONCAT reference manual entry
Этот ответ вел меня к решению: MYSQL: How to define or get LONG string variables
Этот, похоже, работает. Спасибо, Деварт! – ARMAGEDDON
Супер кусок кода - и в сочетании с IN() вы также можете хранить несколько таблиц – Antony
@Devart, как проверить значение null для таблиц переменных –