首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个MySQL命令来实现类似于“删除除t1,b2之外的表”的功能?

问有没有一个MySQL命令来实现类似于“删除除t1,b2之外的表”的功能?
EN

Stack Overflow用户
提问于 2009-09-21 12:43:27
回答 2查看 2.9K关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-21 12:59:10

您可以使用information_schema查找表名,甚至可以将结果格式化为一组DROP语句。

代码语言:javascript
复制
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和更高版本中)编写一个存储过程来执行此操作。

票数 7
EN

Stack Overflow用户

发布于 2009-09-21 13:00:46

您可以使用mysqldump生成DROP TABLE语句的列表,过滤掉不需要的语句,然后通过管道将其返回到mysql客户端。下面是我们如何构建它

首先,下面是数据库的DROP TABLE table语句的列表

代码语言:javascript
复制
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

现在我们可以通过grep和-v来反转匹配--我们需要没有提到我们保留的表的语句(另一种方法是--忽略mysqldump的表选项)

代码语言:javascript
复制
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |  
grep -v 'foo\|bar'

最后,一旦您有了信心,就可以通过管道将其返回到mysql

代码语言:javascript
复制
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1454328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档