上一篇
场景引入:
凌晨3点,你盯着测试数据库里几百张乱七八糟的表,名字像user_2023_temp_backup_v2_final
这种祖传遗产,手动删?No way!今天教你用MySQL「核弹级」清理方案,3秒让数据库回归“白纸状态”~ ✨
先备份!先备份!先备份!(重要的事情说三遍)
执行前务必用mysqldump
或工具导出数据,否则数据灰飞烟灭别哭唧唧 😱
适用场景:想精准控制/查看要删哪些表
-- 步骤1:生成删除所有表的SQL语句(不会立即执行) SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;') FROM information_schema.tables WHERE table_schema = '你的数据库名'; -- 步骤2:复制输出的SQL,确认无误后执行 -- 示例结果: -- DROP TABLE IF EXISTS `users`; -- DROP TABLE IF EXISTS `orders`; -- ...(其他表)
优点:安全可控,能预览要删除的表
缺点:需要手动复制执行
适用场景:需要自动化/批量操作
DELIMITER // CREATE PROCEDURE nuke_all_tables() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE table_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE(); DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO table_name; IF done THEN LEAVE read_loop; END IF; SET @sql = CONCAT('DROP TABLE IF EXISTS `', table_name, '`'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE cur; END // DELIMITER ; -- 调用核弹 💥 CALL nuke_all_tables();
优点:一键执行超省心
缺点:没有后悔药,执行即销毁
适用场景:熟悉Linux/Shell的老司机
# 导出删除语句到文件再执行 mysql -u用户名 -p密码 -Nse 'SHOW TABLES' 数据库名 | while read table; do echo "DROP TABLE $table;"; done > purge.sql mysql -u用户名 -p密码 数据库名 < purge.sql
骚操作:加上| grep -v '重要表名'
可以过滤保留特定表
如果遇到Cannot delete or update a parent row
错误,先暴力禁用外键检查:
SET FOREIGN_KEY_CHECKS = 0; -- 执行你的删除操作 SET FOREIGN_KEY_CHECKS = 1;
information_schema.tables
是否包含正确数据库 记住:这不是演习!执行前深呼吸三次再敲回车 🚀
(完)
本文由 史以蕊 于2025-08-02发表在【云服务器提供商】,文中图片由(史以蕊)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/510623.html
发表评论