更新时间:2025-09-19 GMT+08:00
序列(Sequence)
简介
序列(Sequence)是一种数据库对象,用于生成数字队列。序列的值可以按照设定的增量递增或者递减。Sequence默认最大值为2^63-1,如果使用了Large标识则最大值可以支持到2^127-1。
示例
- 序列的创建和使用
--创建序列。 gaussdb=# CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 1 MAXVALUE 99999; --查看序列下一个值。 gaussdb=# SELECT nextval('seq_test'); nextval --------- 1 (1 row) --删除序列。 gaussdb=# DROP SEQUENCE seq_test; DROP SEQUENCE
- 序列空洞
序列设置缓存后虽然可以提升性能,但是也有可能产生空洞。
--创建表。 gaussdb=# CREATE TABLE tb_test(c1 int,c2 varchar); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'c1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --创建与表关联的序列。 gaussdb=# CREATE SEQUENCE seq_test START 1 CACHE 10 OWNED BY tb_test.c1; CREATE SEQUENCE --设置字段的默认值。 gaussdb=# ALTER TABLE tb_test ALTER COLUMN c1 SET DEFAULT nextval('seq_test'::regclass); ALTER TABLE --插入数据。 gaussdb=# INSERT INTO tb_test (c2) VALUES ('a'); INSERT 0 1 gaussdb=# INSERT INTO tb_test (c2) VALUES ('b'); INSERT 0 1 --退出数据库重新登录后再次插入数据。 gaussdb=# INSERT INTO tb_test (c2) VALUES ('c'); INSERT 0 1 --查询数据,序列出现了空洞。 gaussdb=# SELECT * FROM tb_test ORDER BY c1; c1 | c2 ----+---- 1 | a 2 | b 11 | c (3 rows) --删除表。 gaussdb=# DROP TABLE tb_test; DROP TABLE
父主题: 基础概念