是否存在在一次操作中截断数据库中所有表的查询(命令)?我想知道我是否可以用一个查询做到这一点。
当前回答
给@Mathias Bynens的回答补充一点。当我运行这个时,我得到了一个错误,因为外键检查
mysql -Nse 'SHOW TABLES' <database_name> | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS=0; DROP TABLE $table" <database_name>; done
如果数据库中有视图,则返回一个错误。我必须通过drop view <view_name>手动清除视图;
其他回答
以这种方式使用phpMyAdmin:
Database View => Check All (tables) =>空
如果你想忽略外键检查,你可以取消选中下面的复选框:
[]启用外键检查
您至少需要运行4.5.0或更高版本才能获得此复选框。
它不是MySQL CLI-fu,但是,嘿,它工作!
我不确定,但我认为有一个命令可以使用,你可以复制数据库的模式到新的数据库,一旦你这样做了,你可以删除旧的数据库,这之后,你可以再次复制数据库模式到旧的名称。
我发现最简单的方法是像下面这样做,只需用自己的表名替换表名。重要的是确保最后一行永远是 设置FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `table1`;
TRUNCATE `table2`;
TRUNCATE `table3`;
TRUNCATE `table4`;
TRUNCATE `table5`;
TRUNCATE `table6`;
TRUNCATE `table7`;
SET FOREIGN_KEY_CHECKS=1;
给@Mathias Bynens的回答补充一点。当我运行这个时,我得到了一个错误,因为外键检查
mysql -Nse 'SHOW TABLES' <database_name> | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS=0; DROP TABLE $table" <database_name>; done
如果数据库中有视图,则返回一个错误。我必须通过drop view <view_name>手动清除视图;
我觉得最上面的答案太棒了。但是,当你有一个经过身份验证的MySQL数据库用户时,它就失败了。
这是建立在我链接的顶部答案之上的解决方案。此解决方案安全地处理身份验证,而无需:
为每个表输入密码 担心你的密码泄露到某个地方 对其他MySQL cnf文件(~/.my.cnf)的副作用要了解更多关于这些文件的详细信息,请查看答案底部的参考资料部分。
1. 创建本地。my.cnf文件
vi .temp.my.cnf
[client]
user=<admin_user_goes_here>
password=<admin_password_goes_here>
2. 截断或删除所有表
2.截断所有表(仅为空)
mysql --defaults-extra-file=.temp.my.cnf -Nse 'show tables' <db_name_goes_here> | while read table; do mysql --defaults-extra-file=.temp.my.cnf -e "truncate table $table" <db_name_goes_here>; done
2.B删除所有表(完全删除)
mysql --defaults-extra-file=.temp.my.cnf -Nse 'show tables' <db_name_goes_here> | while read table; do mysql --defaults-extra-file=.temp.my.cnf -e "drop table $table" <db_name_goes_here>; done
3.清理
删除用户密码文件
rm -rf .temp.my.cnf
资源:
https://rtcamp.com/tutorials/mysql/mycnf-preference/ https://dev.mysql.com/doc/refman/8.0/en/option-files.html https://dev.mysql.com/doc/refman/8.0/en/option-file-options.html#option_general_defaults-extra-file