PostgreSQL之Sequence序列
原文地址:https://blog.csdn.net/omelon1/article/details/78798896PostgreSQL是一种关系型数据库,和Oracle、MySQL一样被广泛使用。平时工作主要使用的是PostgreSQL,所以有必要对其相关知识做一下总结和掌握,先总结下序列。一、 Sequence序列Sequence是一种自动增加的数字序列,一般作为行或者表的...
·
原文地址: PostgreSQL之Sequence序列_Frank_lyn的博客-CSDN博客_pgsql sequence
PostgreSQL是一种关系型数据库,和Oracle、MySQL一样被广泛使用。平时工作主要使用的是PostgreSQL,所以有必要对其相关知识做一下总结和掌握,先总结下序列。
一、 Sequence序列
Sequence是一种自动增加的数字序列,一般作为行或者表的唯一标识,用作代理主键。
1、创建Sequence
例子:创建一个seq_commodity,最小值为1,最大值为9223372036854775807,从1开始,增量的步长为1,缓存为1的循环排序Sequence。
SQL语句如下:
--说明
CREATE SEQUENCE IF NOT EXISTS "test_c_id_seq"
INCREMENT 1 // 每次递增1
MINVALUE 0 // 最小值0, 无最小值: NO MINVALUE
MAXVALUE 1000000000000000 // 最大值, 无最大值: NO MAXVALUE
START 0 // 从0开始
CACHE 1 // 设置缓存中序列的个数,建议设置
CYCLE; // 循环,表示到最大值后从头开始
--示例
CREATE SEQUENCE test_c_id_seq
START WITH 1 //从1开始
INCREMENT BY 1 //每次递增1
NO MINVALUE //无最小值
NO MAXVALUE //无最大值
CACHE 1; //设置缓存中序列的个数,建议设置
-- use
CREATE SEQUENCE IF NOT EXISTS "tag_record_seq"
INCREMENT 1
MINVALUE 0
MAXVALUE 1000000000000000
START 0
CACHE 1;
2、查找Sequence中的值
-- 返回下一个序列号
select nextval(seq_ commodity);
-- 返回当前的序列号
select currval(seq_ commodity);
3、设置起始序列值
-- 设置序列值从0开始
SELECT setval('"test_c_id_seq"', 0, true);
-- 设置自增长字段从当前数据库自增长字段中最大的开始
select setval('要修改的序列名称', (select max(id) from your_table));
select setval('test_c_id_seq', (select max(id) from test_table));
4、修改 Sequence
用alter sequence来修改,除了start以外的所有sequence参数都可以被修改。
alter sequence 的例子 (SQL语句)
ALTER SEQUENCE test_c_id_seq
INCREMENT 10
MAXVALUE 10000
CYCLE
NOCACHE;
5、删除Drop Sequence
DROP SEQUENCE test_c_id_seq;
-- example2
DROP SEQUENCE IF EXISTS test_c_id_seq CASCADE
6、Sequence分配策略
- 调用select nextval(seq_ commodity);返回下一个序列号后,系统优先给用户分配一个序号,接着系统的次Sequence立刻加上设置的步长(increment 1),不论此序号用户是否使用;
- 调用select currval(seq_ commodity);返回当前的序列号, 该序列号只要没有被使用,就不会变化,如果当前请求一直使用,那么不会再分配给其他的请求,因为该序列号已经分配给当前请求。
7、绑定序列号到数据库字段
alter table test_c alter column id set default nextval('test_c_id_seq');
更多推荐
已为社区贡献1条内容
所有评论(0)