MySQL-mysql 一次清空数据库里的所有表

意见反馈 意见反馈 主题:991 回复:2082

MySQL-mysql 一次清空数据库里的所有表

晚风撩人 发布于 2017-04-29 字数 118 浏览 1078 回复 5

清空数据库里的所有表,目前用php循环清空很麻烦!我想通过执行一条sql把所有数据库里的所有表清空,这个sql怎么写呀?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(5

晚风撩人 2017-08-27 5 楼

目前想到的方法是这样:

select Concat('TRUNCATE TABLE ', TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES

然后把结果导进一个sql文件,执行source sql文件

瑾兮 2017-08-19 4 楼

用delete

set @var= (select group_concat(table_name) from information_schma.tables where table_schema= 'test1');
set @str= concat('delete ',@var,' from ',@var);
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

mysql> select @str;
+-------------------------------------------------+
| @str |
+-------------------------------------------------+
| delete table1,table2,x,y from table1,table2,x,y |
+-------------------------------------------------+
1 row in set (0.00 sec)

用truncate

set @str= (select group_concat(concat('truncate table ', table_name, ';') separator ' ') from information_schma.tables where table_schema= 'test1');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

mysql> select @str;
+-----------------------------------------------------------------------------------+
| @str |
+-----------------------------------------------------------------------------------+
| truncate table table1; truncate table table2; truncate table x; truncate table y; |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

泛泛之交 2017-08-15 3 楼

mysqldump -h127.0.0.1 -uroot -proot -d -R --add-drop-table db > db.sql
可以先这样吧表结构和存储过程导出
然后直接drop掉数据库
然后重新通过sql脚本执行恢复数据库

晚风撩人 2017-07-12 2 楼

mysql本身没有这个命令,如果不想用多次SQL的方法

第一种,rebuild数据库

 mysqldump -uXXX -pXXX --no-data DBname > back.sql

drop database DBname

create database DBname;

use DBname;

source back.sql;

第二种

 delimiter //
CREATE PROCEDURE truncateAll()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tname CHAR(50);
DECLARE cur1 CURSOR FOR SELECT table_name from INFORMATION_SCHEMA.TABLES WHERE table_schema = 'test';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cur1;

REPEAT
FETCH cur1 INTO tname;
IF NOT done THEN
set @str=concat('truncate table ', tname);
prepare stmt1 from @str;
execute stmt1;
deallocate prepare stmt1;
END IF;
UNTIL done END REPEAT;

CLOSE cur1;
END

想挽留 2017-06-28 1 楼

linux上可以这样:

mysql -nse 'show tables' test|while read table;do mysql -e "truncate table $table" test;done