环境

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';