这个问题已经在这里有一个答案:
- MySQL的DROP所有表,忽略外键 22个回答
如何退出在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;
该@ 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;
谢谢你史蒂夫·霍瓦特发现与反引号的问题。
试试这个。
这个工程即使有约束(外键关系)表。 或者你可以删除数据库并重新创建,但是您可能没有必要的权限来做到这一点。
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命令的结果。
您可以删除 database
,然后用下面的重新创建 : -
mysql> drop database [database name];
mysql> create database [database name];
接受的答案不适合具有大量的表,如Drupal的数据库数据库。 取而代之的是,在这里看到的脚本: https://stackoverflow.com/a/12917793/1507877这确实在MySQL 5.5工作。 注意:围绕线11,有一个 “WHERE TABLE_SCHEMA = SCHEMA();” 这应改为 “WHERE TABLE_SCHEMA = 'DB成INSERT NAME WHICH IMPORT将发生';”