MySQL 快速清空数据库
MySQL项目中使用了 InnoDB 引擎, 测试的时候, 使用的数据因为主键的唯一性和外键约束等问题, 导出和导入很是麻烦.
于是想到了写一个能快速清空数据的存储过程.
注意: 清空表数据使用了 TRUNCATE, 如果你的数据太多, 可能会非常慢!
另外: 我也不是什么 DBA, 不能保证脚本的稳定性.
#!sql
DELIMITER //
CREATE PROCEDURE `test`.`CLEANDB` (_db_name VARCHAR(10))
BEGIN
# 结束符号
DECLARE _done BOOL DEFAULT false;
# 表名
DECLARE _table_name VARCHAR(45);
# 光标指向系统表中指定数据库的表名
DECLARE _cur CURSOR FOR
SELECT `TABLE_NAME`
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA`=_db_name;
# 异常处理, 当光标达到最末时设置结束符号为真.
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = true;
# 打开光标
OPEN _cur;
REPEAT
# 从光标中取出一行
FETCH _cur INTO _table_name;
# 拼接 SQL 语句
SET @truncate_sqlstring = CONCAT('TRUNCATE `', _db_name, '`.`', _table_name, '`;');
# 预处理 SQL 语句
PREPARE _truncate_table FROM @truncate_sqlstring;
# 执行 SQL 语句
EXECUTE _truncate_table;
# 如果结束符号为真则退出循环
UNTIL _done END REPEAT;
# 关闭光标
CLOSE _cur;
END//