首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果记录不存在,则插入H2 SQL数据库。

如果记录不存在,则插入H2 SQL数据库。
EN

Stack Overflow用户
提问于 2013-11-04 12:49:28
回答 4查看 19.1K关注 0票数 18

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

就像这样:

代码语言:javascript
复制
IF 'number of rows in ACCESSLEVELS' = 0
INSERT INTO ACCESSLEVELS VALUES
    (0, 'admin'),
    (1, 'SEO'),
    (2, 'sales director'),
    (3, 'manager'),
    (4, 'REP')
    ;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-04 14:02:18

以下内容适用于MySQL、PostgreSQL和H2数据库:

代码语言:javascript
复制
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);
票数 12
EN

Stack Overflow用户

发布于 2013-11-04 13:04:54

代码语言:javascript
复制
MERGE INTO ACCESSLEVELS 
  KEY(ID) 
VALUES (0, 'admin'),
  (1, 'SEO'),
  (2, 'sales director'),
  (3, 'manager'),
  (4, 'REP');

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

如果不命名列,则必须按照表中定义的方式提供它们的值。如果您希望将列命名为更独立于它们在表定义中的顺序,或者避免在不需要或不可能的情况下为所有列提供值:

代码语言:javascript
复制
MERGE INTO ACCESSLEVELS 
  (ID, LEVELNAME)
  KEY(ID) 
VALUES (0, 'admin'),
  (1, 'SEO'),
  (2, 'sales director'),
  (3, 'manager'),
  (4, 'REP');

请注意,必须将键列(本例中的“ID”)包括在列列表和key子句中。

票数 25
EN

Stack Overflow用户

发布于 2019-01-09 18:09:56

为此,您可以在MySQL兼容性模式数据库中使用H2。从1.4.197版本开始,它支持以下语法:INSERT IGNORE INTO table_name VALUES ...

拉出请求:

在常规模式下不支持INSERT IGNORE,您必须通过在数据库URL中添加;MODE=MySQL或执行SET MODE MySQL语句显式地启用;MODE=MySQL兼容性模式。

来自官方站点

INSERT IGNORE部分受支持,如果未指定ON DUPLICATE KEY UPDATE,则可用于跳过具有重复键的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19768051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档