我正在使用 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
谢谢