mysql 存储过程的使用

存储过程的使用

问题

今天遇到一个场景,user用户表要拆分成user-employee表,user-customer表,user-account表,三个子表的数据均有部分来自于user表,需要从user表中向其他三个字表中导入数据。

解决办法

之前有想到三种办法

  • 第一种是在测试用例中操作数据源完成数据的导出导入,但这样有一个缺点,就是我的Entity已经修改了,如果要导出,需要新建dto来接住数据,然后在插入到数据库中,这些新的dto与代码逻辑无关,在项目里会有一定的误导性。

  • 第二种是用mysql自带的export和import工具来完成导出导入,这是个笨办法,如果数据量很多的情况下,需要手动调整或在写额外的程序来调整数据,才能插入到库中

  • 第三种是用存储过程来完成,只是设计到数据库表结构的维护,以及数据的清洗,用存储过程来做,我认为比较独立也比较好维护

代码

下面是在从user表往user_account表中导数据的存储过程:

declare id_i varchar(32);
declare loginName_i varchar(255);
declare password_i varchar(255);
declare loginToken_i varchar(32);
declare createTime_i bigint(32);
declare creatorId_i varchar(32);
declare modifyTime_i bigint(32);
declare modifierId_i varchar(32);
#用于提示存储过程执行情况
declare str varchar(300);
declare x int;
#用于处理游标到达最后一行的情况
declare s int default 0;
#cur1是一个多行结果集
declare cur1 cursor for select id,loginName,password,loginToken,createTime,creatorId,modifyTime,modifierId from user order by createTime desc;
#设置一个终止标记
declare continue handler for not found set s = 1;
open cur1;
    fetch cur1 into id_i,loginName_i,password_i,loginToken_i,createTime_i,creatorId_i,modifyTime_i,modifierId_i;    
    while s<> 1 do
		insert into user_account(id,loginName,password,loginToken,createTime,creatorId,modifyTime,modifierId) values(id_i,loginName_i,password_i,loginToken_i,createTime_i,creatorId_i,modifyTime_i,modifierId_i);
        #读取下一行数据
        fetch cur1 into id_i,loginName_i,password_i,loginToken_i,createTime_i,creatorId_i,modifyTime_i,modifierId_i;
	end while;
    
    close cur1;
    
select str;

转载于:https://my.oschina.net/u/3638962/blog/1506004

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值