使用merge into实现千万级别数据迁移

    之前项目需求,需要将另一个系统的数据迁移到当前系统的数据库中。数据量大概4000w,项目所使用的数据库是DB2。当时我们采用sql脚本进行迁移,其中迁移的核心sql语句就是使用merge into语句。

    merge into语法如下:

MERGE INTO <target> USING <source> 
  ON <match-condition>
 WHEN [NOT] MATCHED [AND <othe-condition>]
 THEN [UPDATE SET ... | DELETE | INSERT VALUES ... | SIGNAL ...]
 [ELSE IGNORE]

target:就是待合并的对象,可以是表或视图,但最终操作的还是表

source:即提供合并数据的对象,可为一个select查询或一个表

match-condition:target和source的连接条件

WHEN [NOT] MATCHED:当符合(不符合)条件,执行update,delete,insert操作

    在这就不贴公司数据迁移的sql了,下面举个小栗子怎么使用merge into。

    假如现在有一张学生成绩表A,只有部分数据,如下:

    id           name           score

-----------------------------------------------------------------

    1             张三             80

还有一张学生成绩备份表B,B表有所有学生的成绩,如下:

    id           name           score

-----------------------------------------------------------------

    1             张三             85
    2             李四             85
    3             王五             87
    4             李六             90

    现在我需要将B表的数据迁到A表,如果B表的学生在A中存在,以B表的成绩为准。merge into语句如下:

MERGE INTO (select * from A with ur) AS ORGTABLE 
USING (select * from B with ur) AS TMPTABLE   
ON (ORGTABLE.id = TMPTABLE.id)   
WHEN MATCHED THEN UPDATE SET ORGTABLE.score=TMPTABLE.score   
WHEN NOT MATCHED then INSERT(id,name,score)   values(TMPTABLE.id,TMPTABLE.name,TMPTABLE.score) 

 

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页