H2 SQL数据库 - 如果记录不存在则INSERT

sze*_*ani 8 sql h2

我想初始化H2数据库,但我不确定是否存在记录.如果它们存在,我不想做任何事情,但如果它们不存在,我想写出默认值.

像这样的东西:

IF 'number of rows in ACCESSLEVELS' = 0
INSERT INTO ACCESSLEVELS VALUES
    (0, 'admin'),
    (1, 'SEO'),
    (2, 'sales director'),
    (3, 'manager'),
    (4, 'REP')
    ;
Run Code Online (Sandbox Code Playgroud)

Tho*_*ler 6

以下适用于MySQL,PostgreSQL和H2数据库:

drop table ACCESSLEVELS;

create table ACCESSLEVELS(id int, name varchar(255));

insert into ACCESSLEVELS select * from (
select 0, 'admin' union
select 1, 'SEO' union
select 2, 'sales director' union
select 3, 'manager' union
select 4, 'REP'
) x where not exists(select * from ACCESSLEVELS);
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下这个语法吗?很难破译它 (2认同)

小智 5

MERGE INTO ACCESSLEVELS 
  KEY(ID) 
VALUES (0, 'admin'),
  (1, 'SEO'),
  (2, 'sales director'),
  (3, 'manager'),
  (4, 'REP');
Run Code Online (Sandbox Code Playgroud)

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

  • 我知道这个功能,但我不想更新记录(如果存在)。 (2认同)