ON DUPLICATE KEY 自動インクリメントの異常
MySQL で、テーブルにデータを挿入するときに ON DUPLICATE KEY UPDATE を使用すると、予期しない動作が発生する可能性があります自動インクリメント列を使用します。質問で説明されているように、最初の挿入時に自動インクリメント値が期待どおりにインクリメントされることが観察されますが、ON DUPLICATE KEY 条件がトリガーされて新しい行が挿入されると、自動インクリメント値が不規則に表示されます。
この問題に対する答えは、MySQL が ON DUPLICATE KEY UPDATE を処理する方法にあります。 MySQL のドキュメントに記載されているように、この操作中に、MySQL は新しい行を挿入するのではなく、既存の行の更新を実行します。自動インクリメント列の場合、INSERT ステートメントは、更新が適用される前に自動インクリメント値をインクリメントします。ただし、UPDATE ステートメントは値をインクリメントしません。
簡単に説明すると、
その結果、更新された行の自動インクリメント列は、予期した値を反映しません。新しい行が挿入された場合に割り当てられる値。自動インクリメント列に依存してギャップをなくすことは推奨されないことに注意してください。厳密な連続番号付けが重要な場合は、出力でトリガーまたは計算値を使用してカスタム ロジックを実装し、目的の増分動作を維持することをお勧めします。
以上がON DUPLICATE KEY UPDATE で MySQL の自動インクリメントが誤動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。