有个很古老的表 200个字段左右,都是一些说明书等等信息,最近在重构项目
新表设计成每个字段加个标记变成单独一条数据
原表几万条数据,新表会变成 几百万条数据
写过 java/python 用程序连接数据去处理,各种原因都失败了
最后没办法 写了一个存储过程,真快呀
下面贴存储过程代码
CREATE PROCEDURE `products_info_convert`()
COMMENT '旧版商品详情转新版'
begin
# 创建接收游标数据的变量
declare aID int ;
#... 此处省略200个字段
# 每个变量前加a 是因为不能和数据字段重合
# 没有纠结为什么 能用就好了
# 这个字段可以去创建表的语句里面 copy 然后用编辑器 《列操作》很快的
# 下面所有的字段都是列操作出来的
declare astatus tinyint unsigned ;
# 创建结束标志变量
declare done int default false;
declare ret CURSOR FOR SELECT ID,...status from products_info;
# 指定游标循环结束时的返回值
declare continue HANDLER for not found set done = true;
TRUNCATE TABLE products_info_new;
open ret;
# 开始循环游标里的数据
read_loop:loop
fetch abn11 into aID, .............. 此处省略200个字段,astatus;
# 判断游标的循环是否结束
if done then
leave read_loop; # 跳出游标循环
end if;
insert into products_info_new(p_id,tag,name,desc,_status,create_time)
VALUES
(aID,'code','',aCode,0,160988000000),
此处省略200行,也是列操作就可以了
(aID,'status','',astatus,0,160988000000);
end loop;
close ret;
end
也是借鉴了一些网上的其它文章写的
谢谢大家 欢迎指导
数据库新人报道
部分代码 不确定是否不需要