记一次数据导入的想法

需求

项目于5月份上线支持。但是从3月份开始,公司就开展了实践,用Excel和文档来记录了两个月的相关数据。而且数据库的表之间是有关联关系的,并且是以数据库表自增的主键关联起来。现在需要把这两个月的数据导入到生产环境数据库,生产环境数据库只能运维的同事维护,不能自己做改动。

具体情况描述(以用户角色为例)

  • 业务部门给的excel表格如下:
    在这里插入图片描述
  • 数据库表结构如下
    在这里插入图片描述
  • 要求:
    根据excel的信息将用户信息以及用户角色信息导入到数据库中。

解决方案

1、借助于java代码和临时表来实现,适用于大规模多次的导入。

方案流程图:
在这里插入图片描述

  1. 在开发数据库中创建一个与Excel表格中字段一直的excel_temp临时表用来存储从excel中读取的数据。因为excel中的数据会比较杂乱,这一层起到了过滤的作用。不要读Excel后直接存储到开发环境的user和user_role表中,这样不好处理,出了问题难以定位。
  2. 通过java代码写逻辑,将数据从excel_temp表中获取,然后将数据根据用户角色规则插入到user和user_role表中。
  3. 数据已经存储到两张表中了。由于user_role和user是用主键进行关联的,那么如果直接用本来的主键,到生产中就很有可能与生产环境中原本数据的主键冲突。
  4. 于是,我们在生产环境中多建了1:1的两张临时表user_temp,user_role_temp,这样以便将我们上述步骤生成的数据输入到生产环境数据库中。
  5. 然后通过java代码,将数据转移到user和user_role表中。这样就不会出现主键重复的问题了。

2、方法较为简单,适合关联关系较简单的数据库

  1. 笔者依旧使用了java代码获取了excel数据并存储到excel_temp临时表中。
  2. 还是用excel_temp表的数据注入到开发环境数据库的user表中。
  3. user表的数据是初始值,所以只要插入user信息后续通过唯一的user_account就可以获取主键user_id。
  4. 于是就可以导出user数据,手动将主键字段去掉,直接可以插入到生产环境中。
  5. 而通过java代码查询excel_temp表就可以批量生成添加数据到user_role的sql语句。
INSERT INTO user_role(user_id,role_id,role_name)VALUES((SELECT user_id FROM user WHERE user_account = '10061***'),1,'管理员');
  1. 这样比上一种方法较为简单,也符合需求。

其实该项目的表应该直接以user_account这个唯一值来关联上述的两张表,这样的设计才合理。吸取教训。


  • 文章是个人知识点整理总结,如有错误和不足之处欢迎指正。
  • 如有疑问、或希望与笔者探讨技术问题(包括但不限于本章内容),欢迎添加笔者微信(o815441)。请备注“探讨技术问题”。欢迎交流、一起进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值