
# 序列（Sequence）
#### 简介
序列（Sequence）是一种数据库对象，用于生成数字队列。序列的值可以按照设定的增量递增或者递减。Sequence默认最大值为2\^63-1，如果使用了Large标识则最大值可以支持到2\^127-1。
#### 示例
- 序列的创建和使用
  ```
  --创建序列。
  gaussdb=# CREATE SEQUENCE seq_test
      START WITH 1
      INCREMENT BY 1
      MAXVALUE 99999;
  CREATE SEQUENCE
  --查看序列下一个值。
  gaussdb=# SELECT nextval('seq_test');
   nextval 
  ---------
         1
  (1 row)
  --查看序列当前值。
  gaussdb=# SELECT currval('seq_test');
   currval 
  ---------
         1
  (1 row)
  --删除序列。
  gaussdb=# DROP SEQUENCE seq_test;
  DROP SEQUENCE
  ```
  
- 序列空洞
  序列设置缓存后虽然可以提升性能，但是也有可能产生空洞。
  ```
  --创建表。
  gaussdb=# CREATE TABLE tb_test(c1 int,c2 varchar);
  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;
   c1 | c2 
  ----+----
    1 | a
    2 | b
   11 | c
  (3 rows)
  --删除表。
  gaussdb=# DROP TABLE tb_test;
  ```
  
 
