防止使用多个值在mysql duplicate insert上自动递增

j8ag8udp  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(241)

当您试图插入一个已经存在的行时,是否有一种公认的做法,即批量插入表中不存在的值而不自动递增?
对于单行插入的情况有一个很好的答案:防止mysql duplicate insert上的自动递增
但是,为了提高插入效率,我想用一个sql命令插入大量的行(i、 e.:插入mybigtable值((value1_行1,value2_行1),(value1_行2,value2_行2)
附加信息:我想有所有的id的可用性,因为我的表有潜力变得非常大。将自动增量变量大小更改为bigint将是最后的手段。我的插入应用程序将尝试定期插入大量已经存在的行(比如股价更新),因此我将有效地跳过大量自动递增的id。
为什么使用自动递增:我认为为了提高查询速度,我应该在我的(非常大的)表中使用整数索引作为主键,而不是字符串字段的组合。我还认为我应该使用自动增量,所以mysql为我处理并发。

uttx8gqw

uttx8gqw1#

你可以在另一个问题中使用这个技巧,使用 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)

相关问题