如何在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命令返回空集。
推荐文章
- 警告用户/local/mysql/data目录不属于mysql用户
- 添加一个复合主键
- 无法添加或更新子行:外键约束失败
- 如何使用文件的行作为命令的参数?
- 如何从本地机器mysqldump远程数据库
- 如何正确地创建复合主键- MYSQL
- 仅在Datetime列上按日期分组
- 在MySQL数据库中存储货币值的最佳数据类型
- BAT文件:打开新的cmd窗口并在其中执行命令
- 如何做一个非贪婪匹配在grep?
- 如何自定义'显示进程列表'在mysql?
- MySQL删除一些外键
- 用MySQL LEFT JOIN删除行
- 如何在IntelliJ IDEA中输入命令行参数?
- MySQL - length() vs char_length()