-->

如何删除从没有DROP DATABASE权限的命令行所有的MySQL表吗? [重复](How t

2019-06-18 03:42发布

这个问题已经在这里有一个答案:

  • MySQL的DROP所有表,忽略外键 22个回答

如何退出在Windows MySQL中的所有表,使用命令提示符? 我想这样做的原因是,我们的用户可以访问数据库中删除,但没有获得重新创建数据库本身,为此,我们必须手动删除表。 有没有办法删除所有表一次? 请记住,大部分的表与外键链接,这样他们就必须以特定的顺序被丢弃。

Answer 1:

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


Answer 2:

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

谢谢你史蒂夫·霍瓦特发现与反引号的问题。



Answer 3:

试试这个。

这个工程即使有约束(外键关系)表。 或者你可以删除数据库并重新创建,但是您可能没有必要的权限来做到这一点。

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中的空set命令的结果。



Answer 4:

您可以删除 database ,然后用下面的重新创建 : -

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


Answer 5:

接受的答案不适合具有大量的表,如Drupal的数据库数据库。 取而代之的是,在这里看到的脚本: https://stackoverflow.com/a/12917793/1507877这确实在MySQL 5.5工作。 注意:围绕线11,有一个 “WHERE TABLE_SCHEMA = SCHEMA();” 这应改为 “WHERE TABLE_SCHEMA = 'DB成INSERT NAME WHICH IMPORT将发生';”



文章来源: How to remove all MySQL tables from the command-line without DROP database permissions? [duplicate]