使用多个值

时间:2018-05-07 17:39:53

标签: mysql insert auto-increment

当您尝试插入已存在的行时,是否存在批量插入不会自动递增的值的批量插入值?

对于单行插入案例,有一个很好的答案: 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为我处理并发。

1 个答案:

答案 0 :(得分: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)