需求背景:有一个业务方需要定期跟数据库进行数据同步,就是需要定期往数据库中同步部分数据,而这些数据并不能被当前系统直接使用,需要做一些处理同步到系统所使用的数据库中,处理比较复杂,没办法进行实时的同步,所以需要写个定时任务,将处理后的数据进行同步,说白了就是数据库中两个表的数据同步。
实现这个需求,首先想到的是直接通过sql
进行同步,表之间数据同步无非是三种操作:更新,删除,插入,假设两个表 dst
,src
,dst
中有id,name,auth
三个字段,src
中有id,name,dsc
三个字段,需要将src
中的id,name
同步到dst
中去,如图所示:
在dst
和src
中都存在的数据,只需要按照src
中的数据,批量更新dst
中的数据即可,sql
语句可能是这样:
update dst, src set dst.id=src.id,dst.name=src.name where src.id=dst.id;
更新完成之后,需要向dst
表中插入在src
存在,而dst
中不存在的数据,简单的sql
可能是这样:
insert dst (id,name,auth) select src.id,src.name,'1' from src where not exists(select d