mysql创建序列发生器_PostgreSQL --序列与自增id的秘密

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

发布时间:2020-07-09 21:12:20

来源:51CTO

阅读:18739

作者:朱飞东

一、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循环

例如:

48fac03412c7f0c5e5136460fd4bcb79.png

二、序列

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)

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值