V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
1010011010
V2EX  ›  问与答

[MySQL]WHERE NOT EXISTS 如何能解决重复插入问题

  •  
  •   1010011010 · 2019-10-29 17:08:29 +08:00 · 1985 次点击
    这是一个创建于 1859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到一篇帖子: MySQL 语句级避免重复插入—— Insert Select Not Exist

    INSERT INTO table (column1, column2, column3 ...columnN)
    SELECT value1, value2, value3 ...valueN
    FROM dual
    WHERE NOT EXISTS (
        SELECT *
        FROM table
        WHERE column = value
    );
    

    本以为和查询后再插入并无差别,查询后如果被其他事务插入 就会导致重复

    结果是 执行后,有 B 事务也插入了此值,则 A 事务会阻塞 直到 B 事务提交,然后判断已存在 不插入

    看了文档,是不是因为并发插入机制?

    其中到底是怎么工作的?这种办法可靠吗?小老弟才疏学浅整不明白

    4 条回复    2019-10-30 01:24:11 +08:00
    CallMeReznov
        1
    CallMeReznov  
       2019-10-29 17:11:48 +08:00 via Android
    难道不是加锁?
    sun1991
        2
    sun1991  
       2019-10-29 17:24:19 +08:00
    不可靠, 不要用. 解决重复插入最好的方法是上 unique index.
    zhaishunqi
        3
    zhaishunqi  
       2019-10-29 17:27:10 +08:00
    hushao
        4
    hushao  
       2019-10-30 01:24:11 +08:00 via iPhone
    对的,unique index 正解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.