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

时间:2012-07-25 16:01:58

标签: auto-increment h2

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

create table table 
(
key int not null primary key auto_increment,
name varchar(30)
);

然后我执行以下请求:

insert into table values ( null , 'one');// key=1
insert into table values ( null , 'two');// key=2

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

insert into table values ( null , 'three');// key=33

最后,以下是所有结果:

enter image description here

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

2 个答案:

答案 0 :(得分:14)

数据库使用a cache of 32 entries for sequences,并且自动增量在内部实现了一个序列。如果系统在没有关闭数据库的情况下崩溃,那么最多会丢失许多数字。这类似于序列在其他数据库中的工作方式。在这种情况下,不保证无间隙地生成序列值。

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

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

答案 1 :(得分:0)

不要关闭终端。终端是h2-tcp-server的父进程。他们没有超脱。当您关闭终端时,它的进程将关闭所有子进程,这意味着紧急服务器关闭