返回顶部
首页 > 资讯 > 数据库 >PostgreSQL --序列与自增id的秘密
  • 739
分享到

PostgreSQL --序列与自增id的秘密

2024-04-02 19:04:59 739人浏览 薄情痞子
摘要

一、postgresql的自增id serial 1.2、serial的本质 我们在创建表时,经常需要使用到自增id,往往这么写, create table test ( id serial, #

一、postgresql的自增id serial

1.2、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
);

1.2、序列的属性

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循环
例如:
PostgreSQL --序列与自增id的秘密

 

二、序列

2.1创建序列

CREATE SEQUENCE name increment by 1 maxvalue 10 minvalue 1 start 1 cycle

2.2、序列操作

下一个值:nextval(reGClass)
当前值:currval(regclass)
设置值:setval(regclass)

2.3、将序列绑定到表

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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作