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

Ali*_*son 15 sql h2 insert-update

我正在使用H2.我想在表中插入一个值(如果它不存在).我创建表:

CREATE TABLE IF NOT EXISTS $types 
  (type VARCHAR(15) NOT NULL UNIQUE);
Run Code Online (Sandbox Code Playgroud)

我想做点什么

REPLACE INTO types (type) values ('type1');
Run Code Online (Sandbox Code Playgroud)

我发现了一个关于替换的例子,显然适用于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
Run Code Online (Sandbox Code Playgroud)

我也试过了

INSERT IGNORE INTO types (type) values ('expense');
Run Code Online (Sandbox Code Playgroud)

INSERT INTO types (type) values ('expense') ON DUPLICATE KEY UPDATE type=type;
Run Code Online (Sandbox Code Playgroud)

我不在乎新插件是否会覆盖旧数据,或者它是否只是不执行新插入.有没有办法用h2数据库做到这一点?

Jod*_*dyT 22

MERGE语句应该让你实现你想要的.我不是H2的专家,但我已经MERGE多次使用SQL Server中的语句,从该网站的外观来看,它应该可以解决问题.

来自网站:

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

  • 是的,它有效!合并类型KEY(type)VALUES('type1'); (2认同)