【问题标题】:Prevent auto-increment on MySQL duplicate insert with multiple values防止具有多个值的 MySQL 重复插入自动递增
【发布时间】:2018-10-17 14:01:08
【问题描述】:

当您尝试插入已存在的行时,是否存在将不存在的值批量插入表中而不自动递增的公认做法?

对于单行插入案例有一个很好的答案: Prevent auto increment on MySQL duplicate insert

但是,为了提高插入效率,我想使用单个 SQL 命令插入大量行。 (即:INSERT INTO myBigTable VALUES ((value1_row1,value2_row1),(value1_row2,value2_row2) ... )

附加信息: 我想拥有所有可用的 ID,因为我的表有可能变得非常大。将 auto_increment 变量大小更改为 BIGINT 将是最后的手段。我的插入应用程序将尝试定期插入大量已经存在的行(想想股票价格更新),因此我将有效地跳过大量自动递增的 ID。

为什么我使用自动增量: 我相信为了查询速度,我应该在我的(非常大的)表中使用整数索引作为主键,而不是字符串字段的组合。我也认为我应该使用 auto_increment,以便 MySQL 为我处理并发。

【问题讨论】:

    标签: mysql insert auto-increment


    【解决方案1】:

    您可以在另一个问题中使用该技术,使用 UNION 查询:

    INSERT INTO yourTable (col1, col2, ...)
    SELECT $row1_value1, $row1_value2, ...
    FROM DUAL
    WHERE NOT EXISTS (
        SELECT 1
        FROM yourTable
        WHERE unique_col = $row1_value1)
    UNION ALL
    SELECT $row2_value1, $row2_value2, ...
    FROM DUAL
    WHERE NOT EXISTS (
        SELECT 1
        FROM yourTable
        WHERE unique_col = $row2_value1)
    UNION ALL
    SELECT $row3_value1, $row3_value2, ...
    FROM DUAL
    WHERE NOT EXISTS (
        SELECT 1
        FROM yourTable
        WHERE unique_col = row1_value1)
    UNION ALL
    SELECT $row4_value1, $row4_value2, ...
    FROM DUAL
    WHERE NOT EXISTS (
        SELECT 1
        FROM yourTable
        WHERE unique_col = $row4_value1)
    

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2013-03-13
      • 1970-01-01
      • 2011-05-28
      • 2014-05-12
      • 2020-06-18
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多