MySQL删除所有表

当我们需要在MySQL数据库中删除所有已经存在的表时,我们可以通过执行多条drop语句的方式逐个删除,但是这样过于繁琐,没有效率,而且容易出错。

以下介绍一次性删除数据库中的所有表的方法。

方案一:使用mysqldump命令

mysqldump是一个备份工具,也可以用来删除数据库中的所有表。在命令行输入如下命令即可:

1
mysqldump -u [用户名] -p --add-drop-table --no-data [数据库名] | grep ^DROP | mysql -u [用户名] -p [数据库名]

其中[用户名]指的是你在MySQL中的用户名,[数据库名]指的是需要删除表格的数据库名称。它执行的步骤是先使用mysqldump备份数据库,然后从备份文件中查找DROP语句并执行。

下面是一个示例:

1
$ mysqldump -u root -p --add-drop-table --no-data mydb | grep ^DROP | mysql -u root -p mydb

执行时需要输入你的MySQL账户密码。此方法适用于需要备份数据库的情况。

方案二:利用MySQL的元数据

MySQL的元数据中记录着所有的表名称,我们可以通过查询并删除所有表的方式来实现一次性删除。在命令行输入如下语句即可:

1
2
3
SELECT concat('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = '[数据库名]';

其中[数据库名]指的是需要删除表格的数据库名称。它执行的步骤是使用SELECT语句查询information_schema表中的tables表,构建并输出每个表格的DROP TABLE语句,然后执行这些语句。

下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT concat('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
-> FROM information_schema.tables
-> WHERE table_schema = 'mydb';
+--------------------------------------------------------------+
| concat('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;') |
+--------------------------------------------------------------+
| DROP TABLE IF EXISTS `mydb`.`table1`; |
| DROP TABLE IF EXISTS `mydb`.`table2`; |
| DROP TABLE IF EXISTS `mydb`.`table3`; |
+--------------------------------------------------------------+
3 rows in set (0.00 sec)

执行查询返回的结果即可删除所有表格。此方法适用于非备份的情况。

1
2
3
DROP TABLE IF EXISTS `mydb`.`table1`; 
DROP TABLE IF EXISTS `mydb`.`table2`;
DROP TABLE IF EXISTS `mydb`.`table3`;

总结

本文介绍了两种可以一次性删除MySQL数据库中所有表格的方法。使用mysqldump命令可以备份并删除数据库,而利用MySQL的元数据可以查询并删除所有表格。

题外话:

查看数据库大小sql:

1
SELECT table_schema "Database Name", sum( data_length + index_length ) / 1024 / 1024 / 1024"Database Size in GB" FROM information_schema.TABLES GROUP BY table_schema;
Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------