在Postgres中,使用SERIAL
/ BIGSERIAL
定义列具有discussed here的三重效果:
int
/ bigint
列。nextval()
。在H2中是否有类似的快捷命令来获取这组相关的行为?
如果没有,那么SQL的长版本会是什么?
答案 0 :(得分:6)
序列在哪里生活?如何调整其值或重置? 的
如果您将列创建为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'基本相同。串行数据类型
如果没有,那么SQL的长版本会是什么?
create sequence foo_id_seq;
create table foo
(
id integer default foo_id_seq.nextval,
other_column varchar(20)
);
这与Postgres serial
之间的最大区别在于H2不知道序列"属于"到专栏。删除表时需要手动删除它。
foo_id_seq.nextval
实际上会转换为(NEXT VALUE FOR PUBLIC.FOO_ID_SEQ)
(并且它将像information_schema.columns
中那样存储。