如何在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命令返回空集。
推荐文章
- 如何删除所有MySQL表从命令行没有DROP数据库权限?
- 从主机连接到docker容器中的mysql
- 如果任何字段包含NULL, MySQL CONCAT将返回NULL
- MySQL中的字符串连接
- Windows递归grep命令行
- Laravel未知列'updated_at'
- Linux相当于Mac OS X的“open”命令
- 如何在Mac上的命令行安装JQ ?
- MySQL更新内部连接表查询
- 在命令行中使用Firefox截取完整页面的截图
- 在pip install -U中“-U”选项代表什么
- 根据查询结果设置用户变量
- 如何将参数转发到bash脚本中的其他命令?
- 不能删除外键约束中需要的索引
- MySQL现在()+1天