2017-05-03 110 views
0

H2(使用MODE = MYSQL打開)支持INSERT ON DUPLICATE KEY UPDATE語句僅與VALUES子句同時拋出「唯一索引或主鍵使用INSERT SELECT語句時出現「衝突」錯誤。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'; 

我使用H2數據庫版本1.4.192。 這是一個錯誤?或者我的代碼有問題嗎?

謝謝

+0

我沒有使用MySql,我正在使用H2版本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 NOT NULL,並且我得到了相同的結果。我要更新刪除AUTOINCREMENT的問題 – user1781028

0

在您的H2控制檯上,如果您有'HIBERNATE_SEQUENCES'表,請務必檢查SEQUENCE_NAME = 'default'NEXT_VAL是什麼。

在我的情況下,我在/src/main/resources/data.sql中有2行(插入語句),而NEXT_VAL是2,這導致了問題。我更改爲3與更新聲明,現在它工作正常。

相關問題