是否有一个MySQL命令来实现“除t1,b2之外的删除表”之类的东西?

时间:2009-09-21 12:43:27

标签: mysql sql-drop

我想保留t1,t2并删除所有其他表。

2 个答案:

答案 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数据库。)

使用PREPAREEXECUTE,您甚至可以避免复制& 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