0

トランザクションごとに 1 ~ 99 の範囲で一意の番号を設定する必要があります。

  • トランザクション 1: seq_num = 1;
  • トランザクション 2: seq_num = 2;
  • ...
  • トランザクション 99: seq_num = 99;
  • トランザクション 100: seq_num = 1; (転がる)

「id」という名前のフィールドのみを持つ SEQ_NUM という名前の MySQL テーブルを作成することを考えているので、毎回次の sql を実行できます。

Update SEQ_NUM set id = id + 1;

seq_num を取得するには、seq_num = 100 の場合、seq_num =1 を設定し、別の SQL を実行して ID を次のようにリセットします。

Update SEQ_NUM set id = 1;

ただし、実行する前に複数のトランザクションが同時に実行される可能性があるため、動作が保証されるかどうかはわかりません

Update SEQ_NUM set id = 1;

シーケンス番号を要求する別のトランザクションがある可能性があり、101 が返されます。

何か案が?

ありがとう!

4

1 に答える 1

3

ここではモジュラス演算子が役立つと思います。おそらくあなたが持っている基本的な考え方はうまくいくでしょうが、その SEQ_NUM が無限に大きくなるのを許し、シーケンス番号のためにそれを選択するとき、それを MOD() で囲みます。

しかし、実際には、この方法で使用できる一意の自動インクリメント ID 列が既にあるのではないかと思います (つまりSELECT MOD(id, 99) as trans_seq)...

于 2012-12-18T19:52:55.533 に答える