2017-05-03 4 views
0

H2 (MODE = MYSQL으로 시작됨)는 VALUES 절과 함께 INSERT ON DUPLICATE KEY UPDATE 문을 지원하고 "고유 인덱스 또는 기본 키 위반 "오류가 발생했습니다. 내가 H2의 DB 버전 1.4.192을 사용하고H2 INSERT SELECT ON DUPLICATE KEY UPDATE가 "고유 인덱스 또는 기본 키 위반"오류

-- creating a simple table 
CREATE TABLE test_table1 (
    id INT NOT NULL, 
    value VARCHAR(255) NOT NULL, 
    PRIMARY KEY (id)) 
ENGINE = InnoDB; 

-- inserting a value 
INSERT INTO test_table1 
VALUES (1, 'test1'); 

-- trying to insert on duplicate key update: it works! 
INSERT INTO test_table1 
VALUES (1, 'test2') 
ON DUPLICATE KEY UPDATE value='test2'; 

-- trying using INSERT SELECT: it throws Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.TEST_TABLE1(ID)" 
INSERT INTO test_table1 
SELECT 1, 'test2' 
FROM test_table1 
ON DUPLICATE KEY UPDATE value='test2'; 

: 여기

은 예입니다. 버그입니까? 아니면 내 코드에 문제가 있습니까?

내 코드에 문제가

+0

저는 H2S 1.4.192 버전을 사용하고 있습니다. ( – user1781028

답변

-1

거기에 감사합니다?

예, 있습니다. 자동 증가 항목에 삽입하는 이유는 무엇입니까? 자동 생성되지 않은 데이터가있는 열을 지정해야합니다. 그래서 :

INSERT INTO test_table1(value) 
    VALUES ('test1'); 

그리고 :

INSERT INTO test_table1(value) 
    SELECT 'test2' 
    FROM test_table1 
    ON DUPLICATE KEY UPDATE value = VALUES(value); 

하신 ON DUPLICATE KEY 재설정 value 때문에 오류가 발생하고 있지만 그 테이블에 기본 키와는 아무 상관이있다.

+0

) ID가 INT가 아닌 ID로 시도했는데 같은 결과가 나타났습니다. 자동 갱신을 삭제하는 질문을 업데이트 할 예정입니다. – user1781028

0

H2 콘솔에서 'HIBERNATE_SEQUENCES'테이블이있는 경우 SEQUENCE_NAME = 'default'에 대해 NEXT_VAL을 확인하십시오.

필자의 경우 /src/main/resources/data.sql에 2 행 (삽입 문)이 있었고 NEXT_VAL은 2 문제였습니다. 업데이트 진술로 3으로 바뀌었고 이제는 정상적으로 작동합니다.

관련 문제