Excel 更改数据同步更新到Mysql数据库
刚上班,领导给我提出一个需求,想要每天更新Mysql数据库中的原有商品订单状态,添加新的商品订单状态。因为公司目前的数据库只能添加数据,不能更改数据,想要更改原有的数据,只能将原有的数据清空,再导入新的数据。从3月12日入职试岗到3月23日,正式想出一个比较不错的解决方法,耗时12天。
记录下思考过程:
首先数据库-物流状态表,长这样:
刚开始的思路:
乍一看,蛮简单的嘛,因为id是自增的没有实质作用,只要通过回执单号,update 更改状态和发货时间、更新时间就可以了,然额,,,,百度好多,并没有找到合适的。
那就问问我们数据部吧,他们给的方案:先查询再删除。语句如下:
查询所有状态为”未完成”从订单号在(所有状态为”已完成”的订单号)中的订单号,删除这些订单号的数据where条件为状态为”未完成” or “在途” ...
select * from 台湾物流状态 where 订单号 in (
select 订单号 from 台湾物流状态 where 物流状态="已完成")
and 物流状态="在途"
先执行查询语句,核对信息完整无误后,将select * 换成delete ,
执行删除语句,将需要删除的数据进行删除。
然而,光查询语句就用了900多秒,我勒个去,。
优化前:955.344s
select * from 台湾物流状态 where 订单号 in (
select 订单号 from 台湾物流状态 where 物流状态="已完成")
and 物流状态="在途"
第一次优化后,使用字段查询:393.244s
select `回执单号`,`状态` from `香港物流状态` a where EXISTS
(
select 回执单号 from `香港物流状态` where 回执单号=a.`回执单号`)
and 状态="在途"
使用*号查询:394.239s
select * from `香港物流状态` a where EXISTS
(
select 回执单号 from `香港物流状态` where 回执单号=a.`回执单号`)
and 状态="在途"
然后同事反馈还是慢,改呗。
转换思路:
后来想使用触发器,,,,但是没有相似的例子可以直接应用,大都是通过一张表数据的改变来修改另一张表的数据,所以先将这个思路放一边。
再换思路:
想到之前在家将excel和mysql连接起来,公司使用的是wps,所以下载mysql驱动ODBC,将wps和mysql连接起来,差不多就是下面的这个方式:
WPS表格连接mysql数据库
https://jingyan.baidu.com/article/d169e18617159b436711d862.html
然而这种方式不能在Excel中编辑数据然后保存在数据库中,不能满足需求,故舍弃。
想到我在家使用的是Office2010的excel for mysql插件,很简单的连接数据库插件,但是公司电脑office版本是2007版本的,试了一下,安装上插件,但是不显示下面这个东东:
使用教程链接:MySQL for Excel简介 http://blog.sina.com.cn/s/blog_731d4f750102uxpw.html
MySQL for Excel 安装包下载:https://dev.mysql.com/downloads/windows/excel/
没办法,下载office2010(中间出了一个小bug,用激活工具激活2010后,每次打开excel还是会出现重新配置;;只要把其他版本的office和wps卸掉,不保留其他配置就没事了;经测试,2010以上版本都可以使用)。
2010安装成功,出现上面的Mysql for excel插件,然后正常连接数据库。新!MySQL for Excel:编辑数据
功能一:
新!Excel for MySQL 编辑数据:
https://www.mysql.com/why-mysql/windows/excel/edit/
点击这个 Edit MySQL Data 这个功能,并且要勾上第二个图 “√”这个选项,就可以在Excel中修改数据后自动保存在数据库中(修改后的数据在Excel中用绿色填充)。
功能二:
追加数据到已存在的表:
点击这个功能,
选择 Automatic的选项,
点击左下角的高级选项:
在最后一个选项,选中如下图所示:
之后就是确定了,然后
点击append,就可以实现追加数据到已存在的表,基本就是一分钟以内的事情,搞定,