我需要删除数据库中的所有表,但事先不知道它们的名称。典型的过程是删除然后重新创建数据库,但这不是一个选项。最好的方法是什么?
答案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 本身在正常运行期间可能创建的文件和目录: