未提交的数据库事务和自动增量列

右旋糖原

我今天遇到了一些奇怪的行为,想知道这是预期还是标准。我们正在针对MySQL5使用Hibernate。我认为在编码过程中我忘记了关闭交易,因此我认为其他人可以建立联系。

当我最终关闭事务,运行代码并检查表时,我注意到了以下内容。我一直在不关闭事务的情况下错误地运行我的代码,因此并没有导致插入实际的行,但是仍然增加了自动增量替代主键值,因此我有一个缺口(即没有ID字段值为751至762)。

这是预期行为还是标准行为?它可能因数据库而异吗?和/或Hibernate自己的事务抽象是否对此具有某些可能的影响?

cle

是的,这是预期的。

如果您考虑一下:数据库还能做什么?如果您增加该列,然后将该列用作同一事务中其他插入中的外键,并且在执行此操作时其他人提交,则他们将无法使用您的值。你会差距很大的。

像Oracle这样的数据库中的序列工作方式大致相同。一旦请求了一个特定的值,是否提交就不再重要了。它永远不会被重用。而且序列也没有绝对的顺序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章