1

参考:防止在 MYSQL 重复插入时自动递增

我正在使用 InnoDB 和一个导致自动递增 ID 跳转的 INSERT IGNORE 语句。

适用于表中单个字段的条目,就像他们在该问题中一样。但是,我遇到了同样的问题 - 基于 INSERT IGNORE 的自动增量 ID 的大幅跳跃。在这一点上,我有大约 2E4 个条目,ID 接近 9E6。

但是,我的 INSERT 语句有 5 个我想添加的字段。最终,我可以使用引用答案中的语句来添加唯一字段。然后使用 UPDATE 语句填写其他字段。但是,如果我想要运行 2 个单独的 MySQL 语句,我只需使用 SELECT 来确定唯一字段是否已经在数据库中,如果不是,则运行 INSERT。

有没有办法在防止 INSERT IGNORE 导致的 ID 跳转的同时插入多个字段?(我在 PHP 中使用 PDO 与我的数据库交互,因此 INSERT 语句是这样的:唯一列INSERT IGNORE INTO tablename (field1, field2, field3, field4, field5) VALUES (?, ?, ?, ?, ?)在哪里。)field1

请注意,我尝试了以下方法: INSERT INTO tablename (field1=$field1, field2=$field2, ..., field5=$field5) SELECT $field1 FROM tablename WHERE NOT EXISTS ( SELECT field1 FROM tablename WHERE field1 = $field1 ) LIMIT 1

INSERT INTO tablename (field1, field2, ..., field5) VALUES (?, ?, ..., ?) SELECT $field1 FROM tablename WHERE NOT EXISTS ( SELECT field1 FROM tablename WHERE field1 = $field1 ) LIMIT 1$data = array($field1, $field2, ..., $field5);

INSERT INTO tablename (field1, field2, ..., field5) VALUES (?, ?, ..., ?) SELECT $field1 FROM tablename WHERE NOT EXISTS ( SELECT field1 FROM tablename WHERE field1 = ? ) LIMIT 1 在这种情况下,我必须添加到上面给出的数组$field1的末尾。$data

谢谢

4

0 回答 0