我想保持T1,T2和丢弃所有其他表。
Answer 1:
您可以使用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
,你可能甚至避免复制和粘贴,以及(在MySQL 5.0.13及更高版本)写一个存储过程来做到这一点。
Answer 2:
你可以使用mysqldump生成DROP TABLE语句的列表,过滤掉你不想要的操作,然后管回入mysql客户端。 下面是我们如何构建起来
首先,这里的数据库DROP TABLE表语句的列表
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP
现在,我们可以通过管道将通过与-v grep来反转匹配 - 我们希望这不要提我们保留(另一种方式来做到这一点是 - 忽略表选项mysqldump的)表的语句
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
文章来源: Is there a MySQL command to implement something like “drop tables except t1,b2”?