如何查找序列的最后一个数字

时间:2013-07-15 13:47:41

标签: sql spring-batch sequences

我在我的应用程序中使用spring批处理。我有一个上传过程,其中数据从excel文件加载到DB中。 excel有五个电子表格,加载在五个不同的表格中。如果上传成功则没问题。但是当上传失败时,比如在第3页中,我正在回滚整个上传。这会导致第一个表中的序列跳过数字。我该如何解决这个问题。我的序列加1并且有nocache。

先谢谢

1 个答案:

答案 0 :(得分:0)

要解决此问题,您很可能必须改变您的期望。序列通常在事务中使用时不会回滚。例如:

  1. T1使用序列S插入表A以生成PK值
  2. T2使用序列S插入表B以生成PK值
  3. 现在你回滚T1。 T2中的PK值会发生什么变化?它们应该重新编号吗?如果有人(比如Java程序)已经读过PK值怎么办?

    你可以看到,即使是非常简单的情况,也不可能回滚序列。

    某些数据库具有identity列的概念,其中DB服务器在内部分配密钥,但即使对于那些,也会有间隙。

    如果你真的需要一个不间断的PK流,你将不得不使用自己的序列(或Java代码中的计数器)并自己维护/重置这个。