Câu hỏi Trong cơ sở dữ liệu H2, trường auto_increment được tăng lên 32?


Tôi có Bảng đơn giản này (chỉ để kiểm tra):

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

Sau đó, tôi thực hiện các yêu cầu sau:

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

Ở giai đoạn này tất cả diễn ra tốt đẹp, sau đó tôi đóng bảng điều khiển H2 và mở lại nó và thực hiện lại yêu cầu này:

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

Cuối cùng, đây là tất cả kết quả:

enter image description here

Tôi không biết làm thế nào để giải quyết vấn đề này, nếu nó là một vấn đề thực sự ... đang chờ phản hồi từ tác giả ...


10
2017-07-25 16:01


gốc


Bạn đang sử dụng phần mềm nào trong ảnh chụp màn hình của mình? - Paul Vargas
Paul: studio camtasia. - Marwen Trabelsi
Lấy làm tiếc! Tôi có nghĩa là các nhà thám hiểm cơ sở dữ liệu. :-) - Paul Vargas
Đây là nhà thám hiểm của H2 :) - Marwen Trabelsi


Các câu trả lời:


Cơ sở dữ liệu sử dụng bộ nhớ cache gồm 32 mục cho chuỗivà tự động tăng được thực hiện trong một chuỗi. Nếu hệ thống bị treo mà không đóng cơ sở dữ liệu, nhiều nhất số này bị mất. Điều này tương tự như cách chuỗi hoạt động trong các cơ sở dữ liệu khác. Các giá trị chuỗi không đảm bảo được tạo ra mà không có khoảng trống trong các trường hợp như vậy.

Vì vậy, bạn đã thực sự đóng cơ sở dữ liệu? Bạn nên - nó không phải là một vấn đề kỹ thuật nếu bạn không, nhưng đóng cơ sở dữ liệu sẽ đảm bảo những điều kỳ lạ như vậy sẽ không xảy ra. Tôi không thể tái tạo vấn đề nếu tôi thường đóng cơ sở dữ liệu (dừng công cụ H2 Console). Đóng tất cả các kết nối sẽ đóng cơ sở dữ liệu và cơ sở dữ liệu bị đóng nếu ứng dụng bị dừng bình thường (sử dụng móc tắt).

Nhân tiện, URL cơ sở dữ liệu chính xác của bạn là gì? Có vẻ như bạn đang sử dụng jdbc:h2:tcp://... nhưng tôi không thể thấy phần còn lại của URL.


14
2017-07-25 18:05



Hi Thomas, Im sử dụng URL này: jdbc: h2: tcp: // localhost / ~ / autoin ... Trong bài viết của tôi Im chỉ chơi với công cụ H2 Console (bởi vì tôi đã có một lỗi trong phần mềm của mình nhưng tôi đã rất ngạc nhiên khi tôi phát hiện ra vấn đề là từ cơ sở dữ liệu H2 không phải từ JPA), "Tôi không thể tái tạo vấn đề nếu tôi thường đóng cơ sở dữ liệu (dừng công cụ H2 Console)" Được rồi tôi đã ghi lại một video trong đó tôi đóng giao diện điều khiển nhưng vẫn còn vấn đề , xem : youtube.com/watch?v=pGuDjgbTr7o&feature=youtu.be - Marwen Trabelsi
Một báo cáo lỗi video, đẹp :-) Khi bạn đóng cửa sổ giao diện điều khiển 'h2 - Raccourci' lúc 0:53 (tôi đoán đó là máy chủ và công cụ điều khiển H2 nhưng tôi không chắc chắn), tôi nghĩ rằng 'bị giết' quá trình và cơ sở dữ liệu không có cơ hội để tự đóng bình thường (không có móc tắt máy được gọi, kết nối không được đóng bình thường). - Thomas Mueller
nếu đây không phải là vấn đề kỹ thuật thì có cơ hội để giải quyết vấn đề này không? Tôi đang mắc kẹt ở giai đoạn này và thời gian đang hết ... - Marwen Trabelsi
Vâng, bạn chỉ có thể bỏ qua vấn đề. Bạn sẽ mất ít nhất 31 mục. Hoặc bạn có thể sử dụng kích thước bộ nhớ cache nhỏ hơn (trong trường hợp này bạn cần tạo chuỗi theo cách thủ công). Hoặc bạn đóng tất cả các kết nối, sẽ đóng cơ sở dữ liệu, hoặc để cho hook tắt máy đóng nó lại. Những gì bạn đã làm là giết quá trình, kết quả trong hành vi được quan sát. Nó không phải là một lỗi. - Thomas Mueller


Không đóng terminal. Terminal là quá trình cha mẹ của h2-tcp-server. Chúng không bị tách rời. Khi bạn đóng terminal, quá trình sẽ đóng tất cả các tiến trình con, nghĩa là tắt máy chủ khẩn cấp


0
2018-05-05 13:41