web-dev-qa-db-fra.com

ID d'incrémentation automatique dans la base de données H2

Existe-t-il un moyen d'avoir un ID BIGINT auto_incrémentant pour une table. Il peut être défini comme tel

id bigint auto_increment

mais cela n'a aucun effet (il n'augmente pas automatiquement). Je voudrais insérer tous les champs, mais le champ ID - le champ ID doit être fourni par le SGBD. Ou dois-je appeler quelque chose pour incrémenter le compteur ID?

46
eriq

Ça marche pour moi. URL JDBC: jdbc:h2:~/temp/test2

drop table test;
create table test(id bigint auto_increment, name varchar(255));
insert into test(name) values('hello');
insert into test(name) values('world');
select * from test; 

résultat:

ID  NAME  
1   hello
2   world
119
Thomas Mueller

IDENTITY

L'approche moderne utilise le type IDENTITY , pour générer automatiquement un entier long de 64 bits incrémenté.

Cette syntaxe à mot unique utilisée dans H2 est une variante abrégée de GENERATED … AS IDENTITY défini dans la norme SQL: 20 . Voir le résumé dans PDF SQL: 2003 a été publié . D'autres bases de données implémentent cela, comme Postgres .

CREATE TABLE event_ ( 
    pkey_ IDENTITY NOT NULL PRIMARY KEY ,  -- ⬅ `identity` = auto-incrementing long integer.
    name_ VARCHAR NOT NULL ,
    start_ TIMESTAMP NOT NULL , 
    stop_ TIMESTAMP NOT NULL 
) ;
11
Basil Bourque

Très simple:

id int auto_increment primary key

H2 créera automatiquement un objet de séquence

5
beloblotskiy

Vous pouvez également utiliser default:

create table if not exists my(id int auto_increment primary key,s text);
insert into my values(default,'foo');
3
ericj