截断mysql数据库中的所有表

truncate all table in mysql database

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


继续从@Pablo管道没有为我连接 - 我想将它限制在一个数据库,然后只限制表

1
2
3
4
SELECT CONCAT('truncate table ',table_name,';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '<<YOUR-DB-NAME>>'
AND TABLE_TYPE = 'BASE TABLE';


您可以执行以下查询:

1
2
select 'truncate table ' || table_name || ';'
  from INFORMATION_SCHEMA.TABLES;

然后将结果保存到脚本并运行它。

其他可能性可能是,

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

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


    您只需选择所有表,然后选择截断所有表。

    enter image description here


    在这里,我给您留下一个存储过程,将您的数据库重置为cero

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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;


    使用单个SQL查询是不可能的。


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

    然后,单击"查看SQL",而不是单击以下窗口中的"截断"。跟着这些步骤

  • 从对话框中复制所有查询,然后将其关闭。
  • 单击"创建用于执行查询的新SQL选项卡"。
  • 粘贴这两行之间的所有查询并执行。
  • set foreign_key_checks = 0;
    set foreign_key_checks = 1;