H2 相当于 Postgres `SERIAL` 或 `BIGSERIAL` 列?

H2 equivalent of Postgres `SERIAL` or `BIGSERIAL` column?

Postgres, defining a column with SERIAL/BIGSERIAL has a triple effect as discussed here中:

H2中是否有类似的快捷命令来获取这组相关的行为?

如果不是,SQL 的长版是什么?

Where does the sequence live? How can you adjust its value or reset it?

如果您将列创建为 auto_increment(或 identity),H2 会在后台创建一个序列。该序列的名称可以通过查看 information_schema.columns:

获得
create table foo 
(
  id           integer auto_increment,
  other_column varchar(20)
);

如果你那么运行:

select column_name, column_default
from information_schema.columns
where table_name = 'FOO'
and table_schema = 'PUBLIC';

你会得到这样的东西:

COLUMN_NAME  | COLUMN_DEFAULT                                                              
-------------+-----------------------------------------------------------------------------
ID           | (NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_C1C36118_ED1C_44D6_B573_6C00C5923EAC)
OTHER_COLUMN |                                                                            

您可以毫无问题地更改该顺序:

alter sequence SYSTEM_SEQUENCE_C1C36118_ED1C_44D6_B573_6C00C5923EAC 
   restart with 42;

这与 Postgres 的串行数据类型基本相同

If not, what would the long version of the SQL be?

create sequence foo_id_seq;

create table foo 
(
  id           integer default foo_id_seq.nextval,
  other_column varchar(20)
);

这与 Postgres serial 的最大区别在于 H2 不知道列的序列 "belongs"。删除table时需要手动删除。

foo_id_seq.nextval 实际上会在创建 table 时转换为 (NEXT VALUE FOR PUBLIC.FOO_ID_SEQ)(并且会像 information_schema.columns.

中那样存储)