我的数据库中有100个表,我只想保留一个。
我尝试过类似下面的查询:
DROP ALL TABLES EXCEPT my_table
但这似乎并不存在。任何想法?
答案 0 :(得分:12)
您可以使用多个列出的表构建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;
答案 1 :(得分:4)
你不能在MySQL中删除多个表。
最简单的方法是导出要保留的表(使用mysqldump
之类的工具),然后删除并重新创建数据库。
答案 2 :(得分:1)
我想知道为什么没有人建议去目录:
C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\...
和删除很容易吗?这就是我所做的,似乎在起作用
答案 3 :(得分:1)
如果您有很多表,请注意GROUP_CONCAT函数的截断。它具有返回字符串的最大长度设置:group_concat_max_len
请参阅:GROUP_CONCAT reference manual entry
这个回答引导我找到解决方案: MYSQL: How to define or get LONG string variables
答案 4 :(得分:0)
您可以构建所有drop语句输出信息文件并在此之后使用文件
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;
答案 5 :(得分:0)
您可以使用mysqldump
,试一试!
mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] |
grep ^DROP |
grep -v 'my_table' |
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]