我想初始化一个H2数据库,但我不确定这些记录是否存在。如果它们存在,我不想做任何事情,但是如果它们不存在,我想写默认值。
就像这样:
IF 'number of rows in ACCESSLEVELS' = 0
INSERT INTO ACCESSLEVELS VALUES
(0, 'admin'),
(1, 'SEO'),
(2, 'sales director'),
(3, 'manager'),
(4, 'REP')
;发布于 2013-11-04 14:02:18
以下内容适用于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);发布于 2013-11-04 13:04:54
MERGE INTO ACCESSLEVELS
KEY(ID)
VALUES (0, 'admin'),
(1, 'SEO'),
(2, 'sales director'),
(3, 'manager'),
(4, 'REP');更新现有行,并插入不存在的行。如果未指定键列,则使用主键列查找行。
如果不命名列,则必须按照表中定义的方式提供它们的值。如果您希望将列命名为更独立于它们在表定义中的顺序,或者避免在不需要或不可能的情况下为所有列提供值:
MERGE INTO ACCESSLEVELS
(ID, LEVELNAME)
KEY(ID)
VALUES (0, 'admin'),
(1, 'SEO'),
(2, 'sales director'),
(3, 'manager'),
(4, 'REP');请注意,必须将键列(本例中的“ID”)包括在列列表和key子句中。
发布于 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,则可用于跳过具有重复键的行。
https://stackoverflow.com/questions/19768051
复制相似问题