V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
youEclipse
V2EX  ›  程序员

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

  •  
  •   youEclipse · Nov 1, 2017 · 2583 views
    This topic created in 3100 days ago, the information mentioned may be changed or developed.

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

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

    7 replies    2017-11-01 21:20:01 +08:00
    hustlike
        1
    hustlike  
       Nov 1, 2017   ❤️ 1
    insert if not exists ?
    redtea
        2
    redtea  
       Nov 1, 2017
    分布式锁
    changnet
        3
    changnet  
       Nov 1, 2017 via iPad   ❤️ 1
    如果不复杂,用 duplicate key update,复杂就写个存储过程。我说的是 MySQL
    panpanpan
        4
    panpanpan  
       Nov 1, 2017 via iPhone
    加锁,专门干这事的
    fuyufjh
        5
    fuyufjh  
       Nov 1, 2017
    INSERT ... ON DUPLICATE KEY UPDATE
    alcarl
        6
    alcarl  
       Nov 1, 2017 via Android
    插入失败时,再更新一下就好啦
    rbe
        7
    rbe  
       Nov 1, 2017 via iPhone
    id 增长太快会有什么问题吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1003 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    ♥ Do have faith in what you're doing.