-2

PHP 経由で MySQL に挿入するエントリは約 50k あります。テーブルはID(自動インクリメント)でシンプルで、VARCHARフィールドはほとんどありません...

このシステムでは、複数のユーザーが同時にログインしてデータを挿入する同じ操作を実行できるため、USER1 が「挿入」を開始し、まったく同じミリ秒で USER2 が同じテーブルにデータを挿入し始めるとしましょう。 USER1 はプロセスを終了し、USER2 エントリを処理しますか、それとも同時に挿入しますか?

そのロジックに従って、USER1 の挿入 ID は 1 から 50k になり、USER2 は 50k から 100k になりますか、それともシャッフルされますか?

...そして、「シャッフル」を行う場合、これを防ぐ方法はありますか?

PS私は知っています-user_idを使用して追加のフィールドを追加できるため、実際の「エントリ」を行ったユーザーを区別できますが、この場合、USER1用に1〜50k、USER2用に50k〜100kのスペースを予約したいと思います....

4

2 に答える 2

1

テーブルを予約し、それによって自分の自動インクリメント ID を確保するにはLOCK、挿入を開始する前にテーブルを確認する必要があります。そうしないと、ID の「シャッフル」が発生する可能性が非常に高くなります。

ただし、自動インクリメント ID の連続性はロックであっても保証されないことに注意してください。連続した ID を持つ挿入のブロックを持つことは「いい感じ」であることを理解していますが、それは目的ではなく、システムでそうする保証はありません。したがって、それに依存したり、期待したりしないでください。

于 2013-02-11T18:23:45.873 に答える
1

あなたはそれを気にするべきではありません。
Id は、特別な意味を持たない一意に作成された識別子です。
この識別子に特別な意味を持たせるときはいつでも、災害に直面します。

于 2013-02-11T18:25:28.010 に答える