我正在清理一个庞大而混乱的数据库.它拥有500多个表,这是Magento Enterprise与Joomla在一个数据库中结合的结果.

更糟糕的是,有一套70多张Joomla桌子根本没有使用.这些都以bak_为前缀.

只需删除这bak_张表就很容易了,但我想先"烘焙"它们(看看我在那里做了什么?).在我的脑海中,我可以想象这样一个命令:

mysqldump -u username -p mydatabase bak_*

但这不管用.最好的方法是什么?谢谢

编辑:是的,我可以明确列出要包括的70个表,或者要排除的430个表,但如果可能的话,我正在寻找更好的方法.

推荐答案

可以在命令行上逐个指定表名,但不使用通配符.

如果时间更短,也可以使用--ignore-table.

另一个 idea 是将表格放入一个文件中

mysql -N information_schema -e "select table_name from tables where table_schema = 'databasename' and table_name like 'bak_%'" > tables.txt 

编辑文件并将所有数据库放在一行上.那就go 吧

mysqldump dbname `cat tables.txt` > dump_file.sql

要将表格放在一行中(不推荐),可以执行以下操作

mysql -NB  information_schema -e "select table_name from tables where table_name like 'bak_%'" | xargs -I"{}" mysql dbname -e "DROP TABLE {}"

Mysql相关问答推荐

无法让我的SQL Select陈述与USE一起使用

括号在SQL查询中的作用?

查找关联数据库表的超集

如何查询一行

我是否需要在 N+1 列上建立索引,才能有效地在 N 列上执行 SELECT,并按其他列排序?

根据名称将值从一个字段复制到不同记录的同一字段

拆分列值并适当地返回拆分值

如何使用减号运算符编写 sql 查询以返回缺少相应值的行?

如何在更新表单中使用 group by?在 SQL 中

使用数据表的直方图(SQL 查询)

使用 JOIN 计算列中的所有值

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

MySQL触发器在某些条件下防止INSERT

不正确的整数(2147483647)被插入到 MySQL 中?

外键可以引用非唯一索引吗?

Sequelize Query 查找日期范围内的所有记录

SQL WHERE 列 = 一切

为什么在 MySQL 中使用外键约束?

匹配 IN 子句中的所有值

在 MySQL Workbench 中导出超过 1000 条记录的查询结果