V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
1010011010
V2EX  ›  问与答

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

  •  
  •   1010011010 · Oct 29, 2019 · 2670 views
    This topic created in 2376 days ago, the information mentioned may be changed or developed.

    看到一篇帖子: 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 replies    2019-10-30 01:24:11 +08:00
    CallMeReznov
        1
    CallMeReznov  
       Oct 29, 2019 via Android
    难道不是加锁?
    sun1991
        2
    sun1991  
       Oct 29, 2019
    不可靠, 不要用. 解决重复插入最好的方法是上 unique index.
    zhaishunqi
        3
    zhaishunqi  
       Oct 29, 2019
    hushao
        4
    hushao  
       Oct 30, 2019 via iPhone
    对的,unique index 正解
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   923 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    ♥ Do have faith in what you're doing.