将一个表分割成多个表

#-------- 1. 创建测试表及测试数据 BEGIN ----------
drop table if exists `testTable`;
create table `testTable`(
	id varchar(50)
);
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
#select * from `testTable`;
#-------- 2. 创建存储过程 ----------
DELIMITER $$
drop PROCEDURE if exists `Proc_GenerateTableByPager`;
$$
create PROCEDURE `Proc_GenerateTableByPager`()
begin
	declare v_pageIndex ,v_pageSize ,v_recordRows,v_sql varchar(4000);
	
	CREATE table if not exists `pager_assistant`(
		rowNum int NOT NULL AUTO_INCREMENT
		,id varchar(50) not null
		,PRIMARY KEY (`rowNum`)
	);
	truncate table `pager_assistant`;
	INSERT `pager_assistant`(id)
	select `id` from `testTable`;
		
	set v_pageIndex=1;
	set v_pageSize=3;
	select @v_recordRows:=max(rowNum) from `pager_assistant`;
	
	while (v_pageIndex-1)*v_pageSize<=@v_recordRows do
		 #注:MySQL 动态SQL 不支持多语句
		 set @v_sql:=CONCAT('drop table if exists testTable', v_pageIndex ,';');
     prepare stmt from @v_sql;  
     EXECUTE stmt;
		 
		 set @v_sql:=concat('create table testTable', v_pageIndex, '(id varchar(50));');
     prepare stmt from @v_sql;  
     EXECUTE stmt;
		 
		 set @v_sql:=concat(' insert into testTable', v_pageIndex, '(id)'
				,' select id from testTable where id in ( '
				,' select id from pager_assistant where rowNum>'
				,(v_pageIndex-1)*v_pageSize
				,' and rowNum<='
				,(v_pageIndex * v_pageSize)
				,' );'
				);
     prepare stmt from @v_sql;  
     EXECUTE stmt;

     set v_pageIndex=v_pageIndex+1;
	end while;
end
$$
call `Proc_GenerateTableByPager`();


原贴:点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值