我今天遇到了一些奇怪的行为,想知道这是预期还是标准。我们正在针对MySQL5使用Hibernate。我认为在编码过程中我忘记了关闭交易,因此我认为其他人可以建立联系。
当我最终关闭事务,运行代码并检查表时,我注意到了以下内容。我一直在不关闭事务的情况下错误地运行我的代码,因此并没有导致插入实际的行,但是仍然增加了自动增量替代主键值,因此我有一个缺口(即没有ID字段值为751至762)。
这是预期行为还是标准行为?它可能因数据库而异吗?和/或Hibernate自己的事务抽象是否对此具有某些可能的影响?
是的,这是预期的。
如果您考虑一下:数据库还能做什么?如果您增加该列,然后将该列用作同一事务中其他插入中的外键,并且在执行此操作时其他人提交,则他们将无法使用您的值。你会差距很大的。
像Oracle这样的数据库中的序列工作方式大致相同。一旦请求了一个特定的值,是否提交就不再重要了。它永远不会被重用。而且序列也没有绝对的顺序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句