一、postgresql的自增id serial 1.2、serial的本质 我们在创建表时,经常需要使用到自增id,往往这么写, create table test ( id serial, #
我们在创建表时,经常需要使用到自增id,往往这么写,
create table test (
id serial, #使用serial来创建一个自增id
name varchar(64) not null
)
通过serial创建自增id,同时会创建属于这个表的自增序列,并将id字段设置为not null
serial和bigserial类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利,本质上是创建了一个序列发生器,然后把自增字段的默认值设置为这个序列发生器的nextval
CREATE TABLE tablename (
colname SERIAL
);
等价于
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename(
colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);
postgres=# \d+ test5_id_seq
Sequence "public.test5_id_seq"
Column | Type | Value | Storage
---------------+---------+---------------------+---------
sequence_name | name | test5_id_seq | plain
last_value | bigint | 1 | plain
start_value | bigint | 1 | plain #序列起始值
increment_by | bigint | 1 | plain #每次递增值
max_value | bigint | 9223372036854775807 | plain #最大值
min_value | bigint | 1 | plain #最小值
cache_value | bigint | 1 | plain
log_cnt | bigint | 0 | plain
is_cycled | boolean | f | plain #是否循环
is_called | boolean | f | plain
Owned by: public.test5.id
因为自增本质上是取序列发生器的下一个值,所以可以多个表共用一个序列发生器,可以实现多表唯一值,当然,还可以设置序列是否可循环来实现id循环
例如:
CREATE SEQUENCE name increment by 1 maxvalue 10 minvalue 1 start 1 cycle
下一个值:nextval(reGClass)
当前值:currval(regclass)
设置值:setval(regclass)
create table test_seq (
id int not null default nextval('my_seq1'),
name varchar(64)
)
--结束END--
本文标题: PostgreSQL --序列与自增id的秘密
本文链接: https://lsjlt.com/news/40706.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0