在MySQL数据库中截断所有表

13

在MySQL数据库中,是否有可能截断所有表?如果有,请提供查询语句。


可能是在一个命令中截断MySQL数据库中的所有表格?的重复问题。 - Robbie Wxyz
7个回答

10

继续从 @Pablo 的问题谈起,我的问题是管道符号无法连接 - 我想将其限制在单个数据库中,并且只使用特定的数据表

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

我遇到了同样的问题,管道没有连接(MySQL 5.6.15)。这个方法对我有用。 - nagu

6
您可以执行此查询:
select 'truncate table ' || table_name || ';' 
  from INFORMATION_SCHEMA.TABLES;

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

另一个可能性是:

  1. 运行查询
  2. 将结果复制到剪贴板(COPY)
  3. 将结果粘贴到MySQL命令解释器中(PASTE)

完成。

如果只运行查询,您就会理解我想表达的意思。


抱歉,我无法理解您的陈述,请将结果保存到脚本中并运行它。 - chetan

6
您可以简单地选择所有表,然后选择全部清空。

enter image description here


这真的很有帮助。非常感谢。我正在寻找这种类型的解决方案,它也适用于mysqlworkbench。 - kailash gaur

3

这里提供一个存储过程,可以将您的数据库重置为零

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语法存在错误"。 - Fernando César

3

无法使用单个 SQL 查询实现。


2
这可能是一件好事。 - Brian Hooper

0

可能会出现由于外键约束而截断失败的情况。 如果您仍然想强制截断,则可以选择将所有表用于截断,如Cristiana Pereira所建议的。

然后,在以下窗口中,不要单击“截断”,而是单击“查看SQL”。 按照以下步骤执行:

  1. 从对话框中复制所有查询,然后关闭对话框。
  2. 单击“创建用于执行查询的新SQL选项卡”。
  3. 将所有查询粘贴在这两行之间并执行。

set foreign_key_checks = 0;
set foreign_key_checks = 1;


0
在phpMyAdmin中,进入“结构”面板。您将看到数据库表的列表。在表格下方勾选“全选”选项以选择所有表格。然后在“选择操作”下拉框中选择“清空”。PhpMyAdmin会询问您:“您真的要执行以下查询吗?”在回答“是”之前,请取消选中“启用外键检查”选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接