Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止使用多个值在MySQL重复插入上自动递增_Mysql_Insert_Auto Increment - Fatal编程技术网

防止使用多个值在MySQL重复插入上自动递增

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

当您尝试插入一个已经存在的行时,是否有一种公认的做法,可以在不自动递增的情况下将不存在的值批量插入到表中

对于单行插入案例,有一个很好的答案:

但是,为了提高插入效率,我希望使用单个SQL命令插入大量行。(即:插入myBigTable值((值1第1行,值2第1行),(值1第2行,值2第2行)…)

其他信息: 我希望所有ID都可用,因为我的表可能会变得非常大。将auto_increment变量大小更改为BIGINT将是最后的选择。我的插入应用程序将尝试定期插入大量已存在的行(想想股价更新),因此我将有效地跳过大量自动递增的ID

我使用自动增量的原因:
我认为为了提高查询速度,我应该在我的(非常大的)表中使用一个整数索引作为主键,而不是字符串字段的组合。我还认为我应该使用自动增量,因此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)