我想保留t1,t2并删除所有其他表。
答案 0 :(得分:7)
您可以使用information_schema
查找表名,甚至可以将结果格式化为一堆DROP
语句。
SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');
(DATABASE()
函数返回当前use
'd数据库。)
使用PREPARE
和EXECUTE
,您甚至可以避免复制& paste,和(在MySQL 5.0.13及更高版本中)编写存储过程来执行此操作。
答案 1 :(得分:1)
您可以使用mysqldump生成DROP TABLE语句列表,过滤掉您不需要的语句,然后将其重新导入mysql客户端。以下是我们如何构建它
首先,这是数据库的DROP TABLE表语句列表
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP
现在我们可以通过grep使用-v来反转匹配 - 我们想要的语句没有提到我们保留的表(另一种方法是mysignldump的--ignore-table选项)< / p>
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |
grep -v 'foo\|bar'
最后,一旦你有信心,你可以将其重新导入mysql
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE