如何控制自动增量ID?

时间:2013-12-08 05:29:46

标签: mysql jpa

我有一个实体,其策略是根据MySQL中的整数列自动生成id。事情很有效,但在测试异常和相关的回滚时,我注意到MySQL没有重置上一个递增的值。

因此,成功保存会生成实体ID 1 尝试保存获取实体ID 2但回滚。 然后成功保存新实体获得实体ID 3.

因此,在表中我们有两个记录。一个id为1,另一个id为3.

有没有办法控制这个?基本上,在我刚才描述的场景中,我希望看到两个实体:一个id设置为1,另一个id设置为2.

3 个答案:

答案 0 :(得分:2)

不,你不能改变它。这就是应该如何。

自动增量ID必须是唯一的。就这样。

答案 1 :(得分:1)

自动递增数字必须是唯一的,但它们不必是连续的。它们只是单调增加,只是它们的实现的巧合。

您始终可以插入特定值并绕过自动增量机制。但你必须知道“下一个”价值是什么价值。为避免竞争条件,您必须锁定表格,查询MAX(id)+1然后插入该值。

这正是MySQL必须要做的,如果它是自动执行此操作。

自动递增的方式现在允许最大并发性而没有竞争条件。因此,当您回滚INSERT时,它会不时“丢失”某些值,否则如果您随后删除了一个值。

答案 2 :(得分:-1)

您可以使用自己的自动增量逻辑来处理它。 拥有一个Max + 1 idgenerator或者有一个表来维护这些表的PK自动生成的ID。 像这样的表

LastKey TableName 1 TableX 5表Y

每次,你都必须从这个表中查询以获得增加的id。