如何从命令行删除所有MySQL表?


29

通常,我打开Terminal.app并连接到远程MySQL数据库。

然后,我使用此命令删除表:

mysql> drop table [table name];

但是我需要的是命令行来删除数据库中的所有表。

如果我使用:

mysql> drop database [database name];

我将完全破坏数据库,而我将无法再次创建表。我对吗?


Answers:


27

您可以删除数据库,然后立即重新创建它:

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

或者,您可以使用脚本删除数据库中的每个表。


好的,只是要确保:我通过以下行连接到Terminal中的远程数据库:/ Applications / MAMP / Library / bin / mysql -h 80.54.554.10 -u adm_user -p my_db。按照您的说明删除并创建数据库后,是否需要更改此连接值或它们保持不变?
Chefnelone 2011年

1
@chef-删除所有表并删除整个数据库不会产生相同的效果。如果仅删除表,则将保留所有数据库范围的权限,如果删除/重新创建数据库,则不会保留。
Nifle

10
@chefnelone:小心!!!删除数据库也会删除存储过程和用户​​定义的视图。
RolandoMySQLDBA 2011年

我很清楚。我将使用脚本删除每个表。
Chefnelone 2011年

1
这是完全不安全的,请参阅评论http://stackoverflow.com/a/12403742/1713660
vladkras

10

您可以尝试以下命令:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

要么:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

DB_NAME您的数据库名称在哪里。您可以在数据库凭证中指定~/.my.cnf或将其添加到命令中(例如-uroot -proot)。

如果您的数据库用户无权删除该方法,则此方法相对于删除和创建数据库具有一些优势。


1
确认第二个例子,太棒了。添加数据库凭据作为附加标志之前--silent-v/ --verbose分别,如:--user=username --password=password --host=host.name
这里

好主意。但是当有外键时会有一些问题。我添加| sort -r到反向行,但仍不兼容某些数据库。
Fancyoung 2015年

2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE


2
欢迎来到超级用户!尽管这可以回答问题,但是如果您可以解释为什么这样做,则将是一个更好的答案。我们正在寻找能够提供一些解释和上下文的全面,高质量的答案。不要仅仅给出一个答案。解释为什么你的答案是正确的,最好是引用。不包含说明的答案可能会被删除。另外,请检查格式。
G-Man说'恢复莫妮卡'

不要忘记在删除表之后设置foreign_key_checks = 1:请参见stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e“ SHOW TABLES” DATABASENAMEHERE | xargs -L1 -I%echo'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%; SET FOREIGN_KEY_CHECKS = 1;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE
toto21
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.