如何在phpMyAdmin中清空数据库中所有表的内容,而不删除数据库中的任何表?
由于我在开发过程中需要经常进行此操作,因此我不希望每次都手动单击60多个表格上的“清空”。
如何在phpMyAdmin中清空数据库中所有表的内容,而不删除数据库中的任何表?
由于我在开发过程中需要经常进行此操作,因此我不希望每次都手动单击60多个表格上的“清空”。
我认为最简单的解决方案是:
创建一个包含多个DELETE语句(每个表一个)的SQL脚本并执行它。
进入phpMyAdmin并选择你想要的数据库。选择SQL选项卡,将SQL脚本粘贴到窗口中,然后点击“Go”按钮。
这里也可以参考:
SELECT T.*
FROM INFORMATION_SCHEMA.tables T
WHERE T.table_type = 'BASE TABLE'
遍历这些结果,构建一个动态的SQL字符串,形如 'DELETE FROM ' + T.Table_Name
TRUNCATE TABLE table_name;
This will create a script that you can run to empty all tables in the database.
TRUNCATE TABLE <tablename>;
很遗憾,没有TRUNCATE DATABASE
或等效的命令。不过,您可以使用某种存储过程来遍历数据库中的所有表并将其截断。我在这里找到了一些类似的内容(链接),但我不知道它是否可行。(您可能需要阅读评论讨论)
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 #
mysqldump -u root -p --no-data mydb > backup_info.sql
实际上,我深入研究并写下了这个:
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
并且会破坏我们的语句。
使用MySQL DROP TABLE删除现有表