userId を手動で生成しています。つまり、前の userId+1 です。
ただし、2 人以上のユーザーが前の userId を読み取り、新しいレコードを挿入した場合。
そのため、2 人以上のユーザーが同じ userId を持つレコードを挿入する可能性があります。
userId を手動で生成しています。つまり、前の userId+1 です。
ただし、2 人以上のユーザーが前の userId を読み取り、新しいレコードを挿入した場合。
そのため、2 人以上のユーザーが同じ userId を持つレコードを挿入する可能性があります。
前のユーザー ID の読み取りとレコードの挿入を同じトランザクションに入れることができます。
トランザクションは、適切なIsoltaion レベルを使用するように設定する必要があります: 少なくとも「シリアル化可能」または「反復可能読み取り」。
このアプローチに従うと、ユーザー ID の増分は、トランザクションの開始後、コミットの前に減少します。
RDBMS が競合状態を処理します。
何らかの方法でプロセスをキューに入れ、特定の時間内に 1 つだけが処理されるようにする必要があります。最も簡単な方法は、クエリの前に何かをロックしselect previous userid
、既にレコードを挿入した後にロックを解除することです。
そうでなければ、これは良い習慣ではありません。RDBMS システムには、これに対するより優れたソリューションがあります。RDBMS のドキュメントで、sequence、identity、または auto_increment を検索してください。