主キーの自動インクリメントギャップ
大量のデータストレージ用に設計されたテーブルで自動インクリメント主キーを利用する場合、これは非常に重要です。数値シーケンスにギャップが発生する可能性があることに注意してください。これはエラーではなく、次の理由による意図的な設計上の選択です:
トランザクションが重複すると、一部の挿入には ID が割り当てられ、他の挿入は失敗してロールバックされ、シーケンス内に未使用のギャップが残る可能性があります。
たとえば、2 つの同時トランザクションがレコードを挿入して連続する自動インクリメント ID (例: 42 と 43) を取得しようとし、その後トランザクションの 1 つが失敗した場合、未使用の ID (42) はシーケンスにギャップを作成します。
すべての挿入で連続した値を保証するには、トランザクションの順次実行を強制する必要がありますが、これはスケーラブルなシステムでは現実的ではありません。
重複の挿入を避けるには一意の列にエントリがある場合は、INSERT IGNORE を使用しています。ただし、この方法は自動インクリメント主キーの動作には影響しません。
したがって、自動インクリメント ID のギャップは避けられず、エラーやデータ破損を示すものではないことを理解することが重要です。
以上が自動インクリメントの主キーにギャップがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。