环境
centos7.9,mysql5.7
清空mysql所有表的数据方法
- 最简单直接(ben)方法, 手动一个个表truncate
TRUNCATE TABLE table_name;
当然有几个限制条件
1. InnoDB引擎
2.非外键子表
如果会写脚本,可以写成脚本执行
- 使用存储过程执行
在对应的库内执行
DELIMITER //
CREATE PROCEDURE TruncateAllTables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName CHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN
LEAVE read_loop;
END IF;
SET @s = CONCAT('TRUNCATE TABLE ', tableName, ';');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
-- 调用存储过程来清空所有表
CALL TruncateAllTables();
在执行存储过程前,建议先备份,也建议在测试库先执行测试
- 导入导出法
直接导出表结构,删原始库或新建库后导入
mysqldump -u 用户名 -p 数据库名 --no-data > 导出.sql
-u 用户名:替换为你的MySQL用户名。
-p:紧接着输入你的密码(密码输入时不会显示)。
数据库名:你想要导出表所在的数据库名称。
表名:要导出结构的表名。
--no-data:这个选项告诉mysqldump只导出表结构,不包含数据。
> 表结构.sql:将输出重定向到一个.sql文件中,这里的表结构.sql是自定义的文件名,你可以根据需要命名。
导入
进入mysql命令行,use数据库
SOURCE /home/user/Downloads/导出.sql;
- 查询组合法
使用命令生成一个删除表的语句,再把生成的命令结果贴回到执行窗口执行
SELECT GROUP_CONCAT('TRUNCATE TABLE ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'your_database_name';