如何在Windows MySQL中删除所有表,使用命令提示符?我这样做的原因是,我们的用户可以访问数据库删除,但没有权限重新创建数据库本身,因此我们必须手动删除表。有没有办法一下子把所有的桌子都放下来?请记住,大多数表都是用外键链接的,因此必须按照特定的顺序删除它们。


您可以删除数据库,然后用下面的方法重新创建它:-

mysql> drop database [database name];
mysql> create database [database name];

你可以生成这样的语句: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; 

公认的答案不适用于拥有大量表的数据库,例如Drupal数据库。相反,请在这里查看脚本:https://stackoverflow.com/a/12917793/1507877 它可以在MySQL 5.5上运行。注意:在第11行左右,有一个“WHERE table_schema = SCHEMA();”这应该改为"WHERE table_schema = 'INSERT NAME OF DB INTO WHICH IMPORT将发生';"


@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;

如果您已经通过添加至少一个不存在的“dummy”表删除了数据库中的所有表,该脚本将不会引发带有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发现反撇号的问题。


试试这个。

这甚至适用于有约束的表(外键关系)。或者,您也可以删除数据库并重新创建,但您可能没有这样做的必要权限。

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命令返回空集。