防止使用多个值在MySQL重复插入上自动递增
当您尝试插入一个已经存在的行时,是否有一种公认的做法,可以在不自动递增的情况下将不存在的值批量插入到表中 对于单行插入案例,有一个很好的答案: 但是,为了提高插入效率,我希望使用单个SQL命令插入大量行。(即:插入myBigTable值((值1第1行,值2第1行),(值1第2行,值2第2行)…) 其他信息: 我希望所有ID都可用,因为我的表可能会变得非常大。将auto_increment变量大小更改为BIGINT将是最后的选择。我的插入应用程序将尝试定期插入大量已存在的行(想想股价更新),因此我将有效地跳过大量自动递增的ID 我使用自动增量的原因:防止使用多个值在MySQL重复插入上自动递增,mysql,insert,auto-increment,Mysql,Insert,Auto Increment,当您尝试插入一个已经存在的行时,是否有一种公认的做法,可以在不自动递增的情况下将不存在的值批量插入到表中 对于单行插入案例,有一个很好的答案: 但是,为了提高插入效率,我希望使用单个SQL命令插入大量行。(即:插入myBigTable值((值1第1行,值2第1行),(值1第2行,值2第2行)…) 其他信息: 我希望所有ID都可用,因为我的表可能会变得非常大。将auto_increment变量大小更改为BIGINT将是最后的选择。我的插入应用程序将尝试定期插入大量已存在的行(想想股价更新),因此
我认为为了提高查询速度,我应该在我的(非常大的)表中使用一个整数索引作为主键,而不是字符串字段的组合。我还认为我应该使用自动增量,因此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)