我有这个简单的表(仅用于测试):
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
最后,以下是所有结果:
我不知道如何解决这个问题,如果这是一个真正的问题...... 等待作者的回复......
答案 0 :(得分:14)
数据库使用a cache of 32 entries for sequences,并且自动增量在内部实现了一个序列。如果系统在没有关闭数据库的情况下崩溃,那么最多会丢失许多数字。这类似于序列在其他数据库中的工作方式。在这种情况下,不保证无间隙地生成序列值。
那么,你真的关闭了数据库吗?你应该 - 如果你不这样做,这在技术上不是问题,但关闭数据库将确保不会发生这种奇怪的事情。如果我通常关闭数据库(停止H2控制台工具),我无法重现该问题。关闭所有连接将关闭数据库,如果应用程序正常停止(使用关闭挂钩),数据库将关闭。
顺便问一下,您的确切数据库网址是什么?您似乎正在使用jdbc:h2:tcp://...
,但我看不到网址的其余部分。
答案 1 :(得分:0)
不要关闭终端。终端是h2-tcp-server的父进程。他们没有超脱。当您关闭终端时,它的进程将关闭所有子进程,这意味着紧急服务器关闭