在H2数据库中,auto_increment字段增加32?

Mar*_*lsi 10 h2 auto-increment

我有这个简单的表(仅用于测试):

create table table 
(
key int not null primary key auto_increment,
name varchar(30)
);
Run Code Online (Sandbox Code Playgroud)

然后我执行以下请求:

insert into table values ( null , 'one');// key=1
insert into table values ( null , 'two');// key=2
Run Code Online (Sandbox Code Playgroud)

在这个阶段一切顺利,然后关闭H2控制台并重新打开它并重新执行此请求:

insert into table values ( null , 'three');// key=33
Run Code Online (Sandbox Code Playgroud)

最后,这是所有结果:

在此输入图像描述

我不知道如何解决这个问题,如果这是一个真正的问题...等待作者的回复......

Tho*_*ler 14

数据库使用32个条目的缓存作为序列,并且自动递增在内部实现序列.如果系统在没有关闭数据库的情况下崩溃,那么最多会丢失许多数字.这类似于序列在其他数据库中的工作方式.在这种情况下,不保证无间隙地生成序列值.

那么,你真的关闭了数据库吗?你应该 - 如果你不这样做,这在技术上不是问题,但关闭数据库将确保不会发生这种奇怪的事情.如果我通常关闭数据库(停止H2控制台工具),我无法重现该问题.关闭所有连接将关闭数据库,如果应用程序正常停止(使用关闭挂钩),则关闭数据库.

顺便问一下,您确切的数据库URL是什么?看来你正在使用,jdbc:h2:tcp://...但我看不到URL的其余部分.

  • 好吧,你可以忽略这个问题.您将失去最多31个条目.或者您可以使用较小的缓存大小(在这种情况下,您需要手动创建序列).或者关闭所有连接,这将关闭数据库,或让关闭挂钩关闭它.你所做的是杀死进程,这会导致观察到的行为.这不是一个bug. (2认同)