gpt4 book ai didi

mysql - 防止 MySQL 重复插入多个值时自动递增

转载 作者:行者123 更新时间:2023-11-29 10:15:10 26 4
gpt4 key购买 nike

当您尝试插入已存在的行时,是否存在一种可接受的做法,可以将不存在的值批量插入表中而不自动递增?

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

最佳答案

您可以使用另一个问题中的技术,使用 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)

关于mysql - 防止 MySQL 重复插入多个值时自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com