복붙노트

[SPRING] 1로 지정하면 Derby Auto가 100 씩 증가합니다.

SPRING

1로 지정하면 Derby Auto가 100 씩 증가합니다.

사용 된 쿼리에서 더비 데이터베이스 테이블을 만들려면 기본 열 자동 증분으로 구성됩니다.

CREATE TABLE \"table\" (\n"
            + " \"id\" INTEGER  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL,\n"
            + " \"path\" VARCHAR(2000) DEFAULT NULL,\n"
            + " \"downloaded\" BOOLEAN DEFAULT false NOT NULL,\n"
            + " \"retried_times\" SMALLINT DEFAULT 0 NOT NULL,\n"
            + " \"name\" VARCHAR(40),\n"
            + " \"downloaded_date\" TIMESTAMP DEFAULT NULL,\n"
            + " PRIMARY KEY (\"id\")\n"

스프링 jdbc를 통해 행을 삽입하면 100 씩 증가합니다. 쿼리에 오류가 있습니까?

해결법

  1. ==============================

    1.이는 자동 증가 열의 값을 사전 할당하기 때문입니다. Derby는 메모리 내 데이터베이스이므로 데이터베이스가 메모리에 처음로드 될 때 자동 증분 값을 캐시합니다. 그런 다음 자동 증분 열의 미래 값은 데이터베이스를 계속해서 질의하는 대신 캐시를 사용하여 생성됩니다. 데이터베이스가 제대로 종료되지 않으면 캐시에서 사용되지 않는 값이 영원히 손실됩니다.

    이는 자동 증가 열의 값을 사전 할당하기 때문입니다. Derby는 메모리 내 데이터베이스이므로 데이터베이스가 메모리에 처음로드 될 때 자동 증분 값을 캐시합니다. 그런 다음 자동 증분 열의 미래 값은 데이터베이스를 계속해서 질의하는 대신 캐시를 사용하여 생성됩니다. 데이터베이스가 제대로 종료되지 않으면 캐시에서 사용되지 않는 값이 영원히 손실됩니다.

    이 문제를 해결할 수있는 두 가지 옵션이 있습니다.

    대부분의 데이터베이스는 시퀀스에 대해 유사하게 동작합니다. 예를 들어 H2는 정확히 동일한 동작을하지만 Derby처럼 100 대신 32의 캐시 크기를 사용합니다.

  2. from https://stackoverflow.com/questions/31804210/derby-auto-increment-by-100-when-specified-as-1 by cc-by-sa and MIT license