ON DUPLICATE KEY による自動インクリメントの異常
MySQL で INSERT ... ON DUPLICATE KEY UPDATE ステートメントを使用すると、予期しない動作が発生する可能性があります。自動増分列で発生します。この問題は、MySQL が最初に挿入を実行しようとして ID が増加することが原因で発生します。その後、重複が検出されると、ID 値に影響を与えることなく更新が行われます。
説明:
MySQL ドキュメントによると、 ON DUPLICATE KEY UPDATE を使用した挿入中に一意のインデックスまたは主キーが存在すると、MySQL は古い行の更新を実行します。この動作は UPDATE ステートメントに似ていますが、InnoDB テーブルの自動インクリメント列を処理する場合には決定的な違いがあります。
このような場合、INSERT ステートメントは自動インクリメント値をインクリメントし、後続の UPDATE ステートメントは自動インクリメント値をインクリメントします。しません。これにより、自動インクリメント値とテーブル内の実際の行数の間に不一致が生じます。
解決策:
自動インクリメント シーケンスが存在することを認識することが重要です。必ずしも連続しているとは限りません。シーケンス内のギャップが許容できない場合は、通常はテーブルのロックと増分値を再計算するトリガーを含む、より複雑な解決策が必要になります。ただし、ほとんどのシナリオでは、途切れることのない自動インクリメント シーケンスに依存することはお勧めできません。
代わりに、一貫性を確保するために出力側で増分値を計算することを検討してください。このアプローチにより、自動インクリメント列への依存がなくなり、より効率的な挿入と更新が可能になります。
以上がMySQL の自動インクリメント動作が「ON DUPLICATE KEY UPDATE」で変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。