我想保持t1,t2和丢弃所有其他表。

有帮助吗?

解决方案

您可以使用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数据库。)

使用PREPAREEXECUTE,你可能甚至避免复制和粘贴,以及(在MySQL 5.0.13及更高版本)写一个存储过程来做到这一点。

其他提示

您可以使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top