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

mysql 增量更新小技巧

鸡仔说 2021-05-25
483

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

其实,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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论