drop PROCEDURE if exists sp_backup_db_100rows;
delimiter //
CREATE PROCEDURE sp_backup_db_100rows()
BEGIN
DECLARE v_sql varchar(200); -- 要执行的动态sql语句
DECLARE c_each_table_name varchar(20); -- 存放每个表名
declare no_more_departments integer DEFAULT 0; -- 定义游标遍历时,作为判断是否遍历完全部记录的标记
-- 获取数据库中所有表名的游标
DECLARE c_tablename CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'abs_extra';
CREATE DATABASE if not exists abs_extra_copy;
OPEN c_tablename;
REPEAT
fetch c_tablename into c_each_table_name; -- 取出每条记录并赋值给相关变量,注意顺序
set v_sql= concat('CREATE TABLE abs_extra_copy.', c_each_table_name , ' AS SELECT * FROM abs_extra.', c_each_table_name , ' LIMIT 100;');
set @v_sql=v_sql; -- 将连成的字符串赋值给一个变量
prepare stmt from @v_sql; -- 预处理需要执行的动态SQL,其中stmt是一个变量
EXECUTE stmt; -- 执行SQL语句
deallocate prepare stmt; -- 释放掉预处理段
until no_more_departments end REPEAT;
CLOSE c_tablename;
END //
delimiter ;
备份一个数据库中每个表的100条数据的存储过程
最新推荐文章于 2023-04-30 22:55:41 发布