暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 增量更新小技巧

鸡仔说 2021-05-26
4232

对数据库进行操作时,我们经常会遇到数据增量更新的场景。比如线上数据迁移,需要将老数据合并进新数据中。原先我的做法是在插入更新之前,先查询新数据中是否有这部分数据,如果有,则更新部分值,如果没有则插入老数据至新表。


其实,mysql 本来就提供这种操作,语法是 INSERT ... ON DUPLICATE KEY UPDATE Statement。要注意的地方是,使用该种语法的前提是,你的表当中必须有一个主键或者唯一索引。ON DUPLICATE KEY 就是找主键或者唯一索引重复的数据,进行接下来的数据更新。

比如我们创建一个表
create table _test_duplicate_key
(
    a varchar(255) not null
        primary key,
    b varchar(255) null,
    c int          null
);


接下来我们执行插入更新操作
INSERT INTO _test_duplicate_key (a, b, c) VALUES ('a''b', 1) ON DUPLICATE KEY UPDATE c = c+1;

第一次执行完,数据库原本没有重复的数据,因此会插入 values  中的数据
mysql> select * from _test_duplicate_key;
+---+------+------+
| a | b    | c    |
+---+------+------+
| a | b    |    1 |
+---+------+------+
1 row in set (0.00 sec)


接下来我们再重复执行一次以上的语句。再来查看一下结果:
mysql> select * from _test_duplicate_key;
+---+------+------+
| a | b    | c    |
+---+------+------+
| a | b    |    2 |
+---+------+------+
1 row in set (0.00 sec)


因为唯一主键设置成 a 字段,所以重复执行该语句时,发现主键重复,执行其后的 update 语句。很优雅地实现了增量更新的操作,希望对大家有启发!

祝进步!


参考资料:

[2] Mysql doc(v=8.0). INSERT ... ON DUPLICATE KEY UPDATE Statement

https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

以上,如果觉得内容对你有所帮助,还请点个「在看」支持,谢谢各位dai佬!




好看的人都点了在看


文章转载自鸡仔说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论