如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?

Posted

技术标签:

【中文标题】如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?【英文标题】:How can I delete the contents of all tables in my database in phpMyAdmin without dropping the database? 【发布时间】:2011-02-01 13:16:39 【问题描述】:

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

由于我在开发过程中每小时会执行几次此操作,因此我不想每次都在所有 60 多个表上单独单击“清空”。

【问题讨论】:

大写字母很重要,请仅在必要时使用。 【参考方案1】:

您可以轻松地从 phpmyadmin 函数中删除所有数据。可能这个功能在2010年发布这个问题的时候还没有,但是我觉得所有初学者都可以参考一下。

Delete all data from database

【讨论】:

【参考方案2】:

恕我直言,最简单的解决方案是:

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

【讨论】:

这是最好的答案,因为它很简单,直截了当,而且它是唯一完全符合原始问题的答案(使用 PhpMyAdmin 删除所有表,而不是 SQL 或控制台调用)。下一个最佳答案是 John Yin 的答案,尽管他使用了 PhpMyAdmin,但他的方法仅在导入具有相同表的非常相似的表时才有用。 这是迄今为止最好的答案,也是最容易实现的 另外,对于未来的读者:您可以取消选中“外键检查”的东西。事实上,这是最简单的答案。【参考方案3】:

其实更深入地写了这个:

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 删除现有表

【讨论】:

【参考方案4】:

我们实际上可以通过 phpMyAdmin 截断所有表格数据!

在 phpMyAdmin 中,您可以按照以下步骤操作:

1) 选择 u DB 并按此方式进行导出操作:

选择自定义导出方法

在格式特定选项中选择“转储表 -> 数据” 在对象创建选项中选择“添加 DROP TABLE ... 语句”。

通过这一步,phpMyAdmin 帮助我们创建了一个包含所有表的完整列表的 sql 脚本

3) 做导入操作,通过这个脚本一个一个地删除和创建每个空白表

【讨论】:

这是最好的答案之一,因为最初的问题是关于 PhpMyAdmin,而不是常规 SQL,如果用户没有这样做的权限,控制台调用可能不是一个选项。【参考方案5】:

您只能像这样导出表结构:

mysqldump -u root -p --no-data mydb > backup_info.sql

然后删除整个数据库,重新创建它并从备份中恢复。

很容易编写整个事情的脚本。

【讨论】:

【参考方案6】:

TRUNCATE TABLE 语句将完全清空一个表(MySql 3.23 及更高版本)。

您可以创建一个可重复用于特定数据库的脚本。 它不是通用的,但每次您想从一个新的数据库开始时,您都无需创建新的数据库 + 登录。

以下是自己创建脚本的方法: 在您的网络浏览器中转到 phpMyAdmin 并选择数据库。单击 SQL 选项卡并执行'SHOW TABLES'。 选择适合打印的格式并将内容复制到文本编辑器。

现在为每个表名重新编写格式:

TRUNCATE TABLE <tablename>;

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

【讨论】:

如果你像这样截断一个表,主键会从 1 开始吗? 没关系告诉我mainelydesign.com/blog/view/…【参考方案7】:
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 #

【讨论】:

【参考方案8】:

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

进入 phpMyAdmin 并选择您想要的数据库。选择 SQL 选项卡并将 SQL 脚本粘贴到窗口中。点击开始。

也看这里:

Drop all tables from a MySQL Database without deletion

【讨论】:

太棒了,并且该 SQL 可以在 phpMyAdmin 中添加书签,以便我可以重复使用它。【参考方案9】:

你可以从这个查询开始

SELECT T.*
FROM INFORMATION_SCHEMA.tables T
WHERE T.table_type = 'BASE TABLE'

并遍历这些结果以构建一个动态 SQL 字符串,以配合 'DELETE FROM ' + T.Table_Name

【讨论】:

【参考方案10】:

很遗憾,没有TRUNCATE DATABASE 或等效项。话虽如此,您可能可以使用某种存储过程来遍历数据库中的所有表并截断它们。 I found something of that kind here,但我不知道它是否有效。 (您可能也应该阅读评论讨论)

【讨论】:

以上是关于如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?

如何在不删除项目本身的情况下删除单个 HABTM 关联项目?

如何在不重新压缩 JPEG 的情况下删除 EXIF 数据?

如何在不从表单中删除数据的情况下重置 BootstrapValidator? [复制]

如何在不删除重复值的情况下对数据集进行分组

如何在不知道其表的情况下删除约束?