如果不存在,插入到h2表中

时间:2013-03-08 03:15:06

标签: sql h2 insert-update

我正在使用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数据库做到这一点?

1 个答案:

答案 0 :(得分:20)

merge statement应该可以让你达到你想要的效果。我不是H2的专家,但我已经多次在SQL Server中使用MERGE语句,从该网站的外观来看,它应该可以解决问题。

来自网站:

  

更新现有行,并插入不存在的行。如果未指定键列,则使用主键列查找行。