如何从溢出后的一系列序列号和翻转中获取

时间:2012-12-18 19:40:01

标签: php mysql

我需要设置一个唯一的数字,每个交易的范围为1-99,

  • 交易1:seq_num = 1;
  • 交易2:seq_num = 2;
  • ...
  • 交易99:seq_num = 99;
  • 交易100:seq_num = 1; (翻转)

我正在考虑创建一个名为SEQ_NUM的MySQL表,只有一个名为'id'的字段,所以每次都可以运行以下的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。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为模数运算符在这里有用。也许你的基本想法会起作用,但允许SEQ_NUM无限增长,当你为序列号选择它时,将它包装在MOD()中。

但实际上,我想知道你是否已经拥有一个独特的&可以这种方式使用的自动递增ID列(即SELECT MOD(id, 99) as trans_seq)...