我正在使用H2。我想在表中插入一个值(如果它不存在)。我创建表:
CREATE TABLE IF NOT EXISTS $types
(type VARCHAR(15) NOT NULL UNIQUE);
我想做一些像
这样的事情REPLACE INTO types (type) values ('type1');
我发现an example关于替换显然适用于MySQL,但我使用的是h2。但是当我从我的h2控制台运行时出现错误:
Syntax error in SQL statement "REPLACE[*] INTO TYPES (TYPE) VALUES ('expense') "; expected "ROLLBACK, REVOKE, RUNSCRIPT, RELEASE, {"; SQL statement:
REPLACE INTO types (type) values ('expense') [42001-170] 42001/42001
我也试过
INSERT IGNORE INTO types (type) values ('expense');
和
INSERT INTO types (type) values ('expense') ON DUPLICATE KEY UPDATE type=type;
我不关心新插件是否会覆盖旧数据,或者它是否只是不执行新插入。有没有办法用h2数据库做到这一点?
答案 0 :(得分:20)
merge statement应该可以让你达到你想要的效果。我不是H2的专家,但我已经多次在SQL Server中使用MERGE
语句,从该网站的外观来看,它应该可以解决问题。
来自网站:
更新现有行,并插入不存在的行。如果未指定键列,则使用主键列查找行。