一个关于并发插入数据库的问题,想请教下各位大佬。

2017 年 11 月 1 日
 youEclipse

场景是: 某个接口会先查询数据库是否有这条记录,记录是有唯一索引的。 如果查询到存在则更新,没有则插入。

问题是:
在同时发起 2 个相同的请求时,则由于 2 个请求开始都查询没有这条记录,都会执行插入操作,这样会导致其中一条插入失败。 请问各位大佬有没有比较好的方案来处理类似问题。一开始想的是用 upsert,但是 upsert 每次都是删除记录再插入,id 增长太快了。

2584 次点击
所在节点    程序员
7 条回复
hustlike
2017 年 11 月 1 日
insert if not exists ?
redtea
2017 年 11 月 1 日
分布式锁
changnet
2017 年 11 月 1 日
如果不复杂,用 duplicate key update,复杂就写个存储过程。我说的是 MySQL
panpanpan
2017 年 11 月 1 日
加锁,专门干这事的
fuyufjh
2017 年 11 月 1 日
INSERT ... ON DUPLICATE KEY UPDATE
alcarl
2017 年 11 月 1 日
插入失败时,再更新一下就好啦
rbe
2017 年 11 月 1 日
id 增长太快会有什么问题吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX