1

参照: MYSQL 重複挿入で自動インクリメントを防止する

InnoDB と、自動インクリメントされた ID でジャンプを引き起こす INSERT IGNORE ステートメントを使用しています。

その質問にあるように、テーブル内の単一フィールドのエントリに対して機能します。ただし、同じ問題があります-INSERT IGNOREに基づいて自動インクリメントされたIDが大幅にジャンプします。この時点で、約 2E4 のエントリがあり、ID はほぼ 9E6 です。

ただし、私の INSERT ステートメントには、追加したいフィールドが 5 つあります。最終的に、参照された回答のステートメントを使用して、一意のフィールドを追加できました。次に、UPDATE ステートメントを使用して他のフィールドに入力します。しかし、2 つの別々の MySQL ステートメントを実行したい場合は、SELECT を使用して一意のフィールドが既に DB にあるかどうかを確認し、そうでない場合は INSERT を実行します。

INSERT IGNORE が引き起こす ID ジャンプを防止しながら、複数のフィールドを INSERT する方法はありますか? (PHP で PDO を使用して DB とやり取りするため、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