如何在Windows MySQL中使用命令提示符删除所有表?我想这样做的原因是我们的用户可以删除数据库,但无法重新创建数据库本身,因此我们必须手动删除表。有没有一种方式可以一次删除所有表?请注意,大多数表都与外键相关联,因此必须按特定顺序删除它们。
如何在Windows MySQL中使用命令提示符删除所有表?我想这样做的原因是我们的用户可以删除数据库,但无法重新创建数据库本身,因此我们必须手动删除表。有没有一种方式可以一次删除所有表?请注意,大多数表都与外键相关联,因此必须按特定顺序删除它们。
您可以生成这样的语句:DROP TABLE t1,t2,t3,...
,然后使用准备好的语句来执行:
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = 'database_name'; -- specify DB name here.
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
GROUP_CONCAT_MAX_LEN
的值,并使用 GROUP_CONCAT('`', table_schema, '`.`', table_name, '`')
对模式和名称进行转义。 - Peter Taylor@Devart的版本是正确的,但是这里有一些改进可以避免出错。我编辑了@Devart的答案,但是它没有被接受。
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
如果您在数据库中添加至少一个不存在的“虚拟”表,此脚本将不会在NULL结果时引发错误(例如,您已经删除了所有表)。
如果您有许多表,则修复了此问题。
并且此小更改可用于删除数据库中存在的所有视图。
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @views = NULL;
SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views
FROM information_schema.views
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@views,'dummy') INTO @views;
SET @views = CONCAT('DROP VIEW IF EXISTS ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
它假设您从要删除的数据库中运行脚本。或在此之前运行此命令:
USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
感谢 Steve Horvath 发现反引号的问题。
\G
会列出即将被删除的内容 - 在执行代码片段的下半部分之前请先查看它。 - rymo试一试。
这甚至适用于具有约束条件(外键关系)的表。或者,您可以只删除数据库并重新创建,但您可能没有执行该操作所需的权限。
mysqldump -u[USERNAME] -p[PASSWORD] \
--add-drop-table --no-data [DATABASE] | \
grep -e '^DROP \| FOREIGN_KEY_CHECKS' | \
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
为了克服外键检查的影响,在生成的脚本末尾添加show table
,并多次运行,直到show table
命令结果为空集。mysqldump -h $RDS_HOSTNAME -u $RDS_USERNAME -p $RDS_PASSWORD --add-drop-table --no-data $RDS_DB_NAME | grep -e '^DROP \| FOREIGN_KEY_CHECKS' | mysql -h $RDS_HOSTNAME -u $RDS_USERNAME -p $RDS_PASSWORD $RDS_DB_NAME
- Mat Schaffermysqldump --host=127.0.0.1 --all-databases --user=$mysql_user --password=$mysql_password --add-drop-table --no-data | grep -e '^DROP \| FOREIGN_KEY_CHECKS\|USE' | mysql --host=127.0.0.1 --user=$mysql_user --password=$mysql_password
- Vincent Fenet您可以使用以下方法删除 数据库
,然后重新创建它:
mysql> drop database [database name];
mysql> create database [database name];