操作前必备准备
-
备份数据库
清空前必须备份,防止误删,以MySQL为例:mysqldump -u [用户名] -p [数据库名] > backup.sql
提示:将
[用户名]
和[数据库名]
替换为实际值,执行后输入密码。 -
确认权限
需拥有数据库的超级用户(如MySQL的root
)或删除权限。
不同数据库的清空方法
MySQL/MariaDB
通过mysql
命令行
mysql -u [用户名] -p -e "DROP DATABASE [数据库名]; CREATE DATABASE [数据库名];"
说明:直接删除数据库并重建(最彻底)。
清空所有表(保留数据库)
mysql -u [用户名] -p [数据库名] -e "SET FOREIGN_KEY_CHECKS=0; \ $(mysqldump -u [用户名] -p --add-drop-table --no-data [数据库名] | grep 'DROP TABLE\|DROP VIEW'); \ SET FOREIGN_KEY_CHECKS=1;"
说明:生成删除所有表和视图的语句并执行,禁用外键约束避免报错。
逐表清空数据
mysql -u [用户名] -p [数据库名] -e "SHOW TABLES" | grep -v "Tables_in" | while read table; do mysql -u [用户名] -p [数据库名] -e "TRUNCATE TABLE $table;" done
说明:循环遍历所有表执行TRUNCATE
(比DELETE
更快且重置自增ID)。
PostgreSQL
删除并重建数据库
sudo -u postgres psql -c "DROP DATABASE [数据库名];" sudo -u postgres psql -c "CREATE DATABASE [数据库名];"
清空所有表(需安装psql
)
sudo -u postgres psql [数据库名] -c " \ DO \$\$ DECLARE r RECORD; \ BEGIN \ FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP \ EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' CASCADE;'; \ END LOOP; \ END \$\$;"
说明:使用PL/pgSQL循环清空所有表,CASCADE
处理外键依赖。
SQLite
sqlite3 [数据库文件.db] "DROP TABLE [表名];" # 删除单表 sqlite3 [数据库文件.db] "VACUUM;" # 释放空间(可选)
提示:SQLite无批量清空命令,需手动删除表或直接删除数据库文件:
rm -f [数据库文件.db] # 彻底删除数据库
关键注意事项
- 备份优先
清空操作不可逆!务必通过mysqldump
、pg_dump
等工具备份。 - 外键约束
若表存在外键关联,使用CASCADE
(PostgreSQL)或禁用外键检查(MySQL)。 - 性能影响
TRUNCATE
:立即清空,不写日志,速度快。DELETE
:逐行删除,可回滚,大表性能差。
- 权限问题
确保Linux用户有数据库访问权限(如MySQL用户需DROP
和CREATE
权限)。 - 生产环境谨慎操作
建议在维护窗口期执行,避免影响线上服务。
- MySQL/MariaDB:优先用
DROP DATABASE + CREATE DATABASE
或循环TRUNCATE
。 - PostgreSQL:通过PL/pgSQL脚本批量清空表。
- SQLite:直接删除文件或逐表操作。
重要提醒:本文方法仅适用于清空数据(保留表结构),彻底删除数据库需执行
DROP DATABASE
,操作前请验证备份有效性,责任自负。
引用说明:
- MySQL官方文档:TRUNCATE TABLE Syntax
- PostgreSQL手册:TRUNCATE
- SQLite文档:DROP TABLE
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9977.html