如何在不删除数据库的情况下删除 MySQL 数据库中的所有表?

如何在不删除数据库的情况下删除 MySQL 数据库中的所有表?

我需要删除数据库中的所有表,但事先不知道它们的名称。典型的过程是删除然后重新创建数据库,但这不是一个选项。最好的方法是什么?

答案1

有一个更简单的 bash 单行命令,使用 mysqldump(来自Thingy Ma Jig 博客)。

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

如果您收到此错误:

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

请尝试以下操作:

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

现在它忽略了限制。

答案2

你应该使用信息架构表来获取有关数据库的元数据,然后删除那里列出的表。

答案3

您也可以尝试使用快速 shell 脚本来执行此操作:

#!/bin/bash

IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
    echo mysql <databaseName> -e "drop table $table"
done

echo在确认其能够按照预期执行之后,将其删除。

答案4

如果您有文件系统访问权限,那么只需rm -rf databasename/*:)。

Drop database 语句的作用相同...摘自 MySQL 手册:

DROP DATABASE 语句从给定的数据库目录中删除 MySQL 本身在正常运行期间可能创建的文件和目录:

相关内容