この問題が起こる可能性は、私には起こり得る問題のために私にはほとんど起こりそうにないようですが、私は質問していました...自動インクリメントIDはコミット時にトランザクションの中間値から変更されることはありますか?
オートインクリメントIDが関与し、割り当てられた。 COMMITの前に、関係するコードは、後で参照できるように、割り当てられたIDのコピーをキャッシュします。その後、トランザクションがコミットされます。
直接クライアントの介入(レコードの削除または変更)がないと仮定すると、キャッシュされたIDが間違っているため、COMMITの直後にID値を自動的に変更するデータベースや状況がありますか? ID中間トランザクションをキャッシュするのはいつでも安全ですか?
私は、このような状況が起きると想像することができますが、RDBMSの実装によっては、gapless値と時間依存型の自動インクリメント値が必要であると判断される場合があります。この仮説的なケースでは、別のトランザクション(または他のギャップ・コッシャー)でのID割り当て後のロールバックによって生じるギャップを埋めるために、IDのいくつかの魔法のシャッフルが行われるかもしれないと想像することができます。これは、キャッシュされた値を無効にします。
誰かがこのような実装や他のキャッシュキラーを知っていますか?
+1私は自問自答者の使用について絶対に正しいと思うのですが...技術的には、値を使って作成順序を決めるのであれば、技術的には代理キーではありません:D – Matthew
'InnoDB'では、 MySQLが使用するトランザクショナルストレージエンジンであるautoincremented idsを再利用することができます。最も高い 'id'を持つレコードが削除され、サーバが再起動された場合、テーブルへの次の挿入は同じ' id'になります。 – Quassnoi