如何在phpMyAdmin中删除数据库中所有表的内容而不删除整个数据库?

16

如何在phpMyAdmin中清空数据库中所有表的内容,而不删除数据库中的任何表?

由于我在开发过程中需要经常进行此操作,因此我不希望每次都手动单击60多个表格上的“清空”。


1
重要提示:程序中大小写字母的使用非常重要,请仅在必要时使用。 - MarkR
10个回答

38

我认为最简单的解决方案是:

  • 在phpmyadmin中选择您想要截断的数据库(位于左侧的数据库列表中)
  • 在主视图中向下滚动,您会看到一个复选框“全选”,旁边是一个下拉框,您可以选择“清空”。完成。

5
这是最佳答案,因为它简单明了,并且是唯一一个完全按照原问题要求(使用PhpMyAdmin删除所有表格,而不是使用SQL或控制台命令)执行的答案。次佳答案是John Yin的答案,但即使他使用了PhpMyAdmin,他的方法也仅在导入具有相同表格的非常相似的数据库时有用。 - OMA
1
这是目前为止最好的答案,而且实现起来也最容易。 - Jean Eric
另外,对于未来的读者:您可以取消“外键检查”选项。事实上,这是最简单的答案。 - Hossam El-Deen

7

创建一个包含多个DELETE语句(每个表一个)的SQL脚本并执行它。

进入phpMyAdmin并选择你想要的数据库。选择SQL选项卡,将SQL脚本粘贴到窗口中,然后点击“Go”按钮。

这里也可以参考:

不删除MySQL数据库的情况下删除所有表


1
太好了,那个SQL可以在phpMyAdmin中被收藏,这样我就可以重新使用它。 - Joshua

4
我们可以通过phpMyAdmin截断所有表中的数据!
在phpMyAdmin中,您可以按照以下步骤操作:
1)选择一个数据库并执行导出操作,方法如下:
选择自定义导出方法
在特定格式选项中选择“转储表 -> 数据”
在对象创建选项中选择“添加DROP TABLE ...语句”
通过此步骤,phpMyAdmin帮助我们创建完整所有表的sql脚本
3)通过此脚本执行导入操作,逐个删除和创建每个空表

这是最佳答案之一,因为原始问题询问的是PhpMyAdmin而不是常规SQL,并且如果用户没有权限进行控制台调用,则可能无法使用该选项。 - OMA

3
你可以从这个查询开始。
SELECT T.*
FROM INFORMATION_SCHEMA.tables T
WHERE T.table_type = 'BASE TABLE'

遍历这些结果,构建一个动态的SQL字符串,形如 'DELETE FROM ' + T.Table_Name


2
TRUNCATE TABLE table_name;

This will create a script that you can run to empty all tables in the database.

TRUNCATE TABLE <tablename>;

注意:如果你有很多表格,可以使用正则表达式。

如果您这样截断一张表,那么主键会重新从1开始吗? - JRowan
1
别在意,这篇文章告诉了我MySQL中truncate、empty和delete from的区别。 - JRowan

2

很遗憾,没有TRUNCATE DATABASE或等效的命令。不过,您可以使用某种存储过程来遍历数据库中的所有表并将其截断。我在这里找到了一些类似的内容(链接),但我不知道它是否可行。(您可能需要阅读评论讨论)


2
你可以轻松地使用phpmyadmin功能删除所有数据。也许在2010年这个问题被发布时,这个功能还不存在,但我觉得所有初学者都可以参考一下。 删除数据库中的所有数据

1
drop procedure if exists truncate_tables;

delimiter #
create procedure truncate_tables()
begin
 declare tab_name varchar(64);
 declare done tinyint unsigned default 0;

 declare table_cur cursor for select t.table_name
 from 
  information_schema.schemata s
  inner join information_schema.tables t on s.schema_name = t.table_schema
 where
   s.schema_name = database() and t.table_type = 'BASE TABLE';

 declare continue handler for not found set done = 1;

 open table_cur;
 repeat
   fetch table_cur into tab_name;
   set @cmd = concat('truncate table ', tab_name);

   prepare stmt from @cmd;
   execute stmt;
 until done end repeat;

 close table_cur;
end #

1
您可以按照以下方式仅导出表结构:
mysqldump -u root -p --no-data mydb > backup_info.sql

然后删除整个数据库,重新创建并从备份中恢复。整个过程可以轻松地编写脚本实现。

0

实际上,我深入研究并写下了这个:

SET @command:='';
SELECT @command:=CONCAT(@command, 'TRUNCATE TABLE ',T.TABLE_NAME,';')
FROM INFORMATION_SCHEMA.tables T
WHERE T.table_type = 'BASE TABLE' AND T.table_schema='YOUR_TABLE_SCHEMA';
PREPARE bye_world FROM @command;
EXECUTE bye_world;
DEALLOCATE PREPARE bye_world;

它从提供的模式 YOUR_TABLE_SCHEMA 中选择所有表名,并将它们放入 @command 用户变量中,形成每个表的查询语句,如下所示: TRUNCATE TABLE TABLE_NAME;

然后,只需准备好所选语句并执行即可。请注意,在查询之前必须声明用户变量,否则它将是 0 并且会破坏我们的语句。

Tutorial

使用MySQL DROP TABLE删除现有表


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