截断mysql数据库中的所有表

截断mysql数据库中的所有表,mysql,Mysql,是否可以截断mysql数据库中的所有表?什么是该查询。不可能使用单个sql查询。您可以执行以下查询: select 'truncate table ' || table_name || ';' from INFORMATION_SCHEMA.TABLES; 然后将结果保存到脚本并运行它 另一种可能是, 运行查询 将结果复制到剪贴板(复制) 将结果粘贴到MySQL命令解释器中(粘贴) 完成了 如果您只是运行查询,您将理解我想说的内容。继续@Pablo pipes并不是为了我而连接的-我想将

是否可以截断mysql数据库中的所有表?什么是该查询。

不可能使用单个sql查询。

您可以执行以下查询:

select 'truncate table ' || table_name || ';' 
  from INFORMATION_SCHEMA.TABLES;
然后将结果保存到脚本并运行它

另一种可能是,

  • 运行查询
  • 将结果复制到剪贴板(复制)
  • 将结果粘贴到MySQL命令解释器中(粘贴)
  • 完成了


    如果您只是运行查询,您将理解我想说的内容。

    继续@Pablo pipes并不是为了我而连接的-我想将它限制为单个数据库,然后仅限于表

    SELECT CONCAT('truncate table ',table_name,';')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = '<<YOUR-DB-NAME>>'
    AND TABLE_TYPE = 'BASE TABLE';
    
    选择CONCAT('truncate table',table_name',;'))
    来自信息\u SCHEMA.TABLES
    其中表_SCHEMA=“”
    表_TYPE='基表';
    
    这里我给您留下一个存储过程,用于将数据库重置为cero

    CREATE DEFINER=`root`@`localhost` PROCEDURE `reset_database`(DB_NAME VARCHAR(100))
    BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tableName VARCHAR(100);
    DECLARE cur CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = DB_NAME AND table_type = 'BASE TABLE';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    
    SET FOREIGN_KEY_CHECKS = 0;
    read_loop: LOOP
    FETCH cur INTO tableName;
      IF done THEN LEAVE read_loop; END IF;
      SET @s = CONCAT('truncate table ',tableName);
      PREPARE stmt1 FROM @s;
      EXECUTE stmt1;
      DEALLOCATE PREPARE stmt1;
    END LOOP;
    SET FOREIGN_KEY_CHECKS = 1;
    
    CLOSE cur;
    END;
    

    只需选择所有表,然后选择“全部截断”


    可能存在由于外键约束而导致截断失败的情况。如果您仍然希望强制截断,那么可以按照Cristiana Pereira的建议选择所有要截断的表

    然后,单击“ReviewSQL”,而不是在下面的窗口中单击“Truncate”。遵循以下步骤

  • 复制对话框中的所有查询,然后将其关闭
  • 单击“为执行查询创建新的SQL选项卡”
  • 在这两行之间粘贴所有查询并执行
  • 设置外键检查=0
    设置外键检查=1


    很抱歉,我无法理解您的语句,请将结果保存到脚本并运行它。这可能是一件好事。可能与管道未连接的问题相同(MySQL 5.6.15)。这对我很有用,真的很有帮助。非常感谢你。我正在寻找这种类型的解决方案,它也是mysqlworkbench中的应用程序。这在我的机器上不起作用。“您的SQL语法有错误”