H2(以MODE = MYSQL开启)仅支持使用VALUES子句的INSERT ON DUPLICATE KEY UPDATE语句,而在使用INSERT SELECT语句时会抛出“唯一索引或主键冲突”错误 .
这是一个例子:
-- 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 db版本1.4.192 . 这是一个错误吗?或者我的代码有问题吗?
谢谢
2 回答
在H2控制台上,如果你有'HIBERNATE_SEQUENCES'表,请确保检查
NEXT_VAL
的NEXT_VAL
是什么 .在我的情况下,我的/src/main/resources/data.sql中有2行(插入语句),
NEXT_VAL
是2,这导致了问题 . 我用update语句更改为3,现在工作正常 .就在这里 . 为什么要插入自动增量列?您应该使用非自动生成的数据指定列 . 所以:
和:
您收到错误是因为
ON DUPLICATE KEY
重置value
,但这与表上的主键无关 .