web-dev-qa-db-ja.com

H2データベースの自動インクリメントID

テーブルにauto_incrementing BIGINT IDを設定する方法はありますか。次のように定義できます

id bigint auto_increment

ただし、効果はありません(自動的に増加しません)。 IDフィールド以外のすべてのフィールドを挿入したい-IDフィールドはDBMSによって提供される必要があります。または、IDカウンターをインクリメントするために何かを呼び出す必要がありますか?

46
eriq

わたしにはできる。 JDBC URL: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; 

結果:

ID  NAME  
1   hello
2   world
119
Thomas Mueller

IDENTITY

最新のアプローチでは、 IDENTITY タイプを使用して、増分する64ビット長整数を自動的に生成します。

H2で使用されるこの単一ワードの構文は、 SQL:20 標準で定義されているGENERATED … AS IDENTITYの短縮形です。 PDF document SQL:2003が公開されました の概要を参照してください。他のデータベースは実装していますこれ、 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

非常にシンプル:

id int auto_increment primary key

H2はSequenceオブジェクトを自動的に作成します

5
beloblotskiy

defaultを使用することもできます:

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