📜  SQL |序列(1)

📅  最后修改于: 2023-12-03 14:47:36.756000             🧑  作者: Mango

SQL 序列

介绍

在 SQL 中,序列(Sequence)是一种对象,作用是生成整数序列。利用序列可以为表创建自增的 ID,可以提供唯一的值作为主键,还可以用于数据的分片和分区。

语法

创建序列的语法如下:

CREATE SEQUENCE sequence_name
    [ START WITH <start_value> ]
    [ INCREMENT BY <increment_value> ]
    [ MINVALUE <min_value> | NO MINVALUE ]
    [ MAXVALUE <max_value> | NO MAXVALUE ]
    [ CYCLE | NO CYCLE ]
    [ CACHE <cache_value> | NOCACHE ]
    [ OWNED BY <table_name>.<column_name> ]

其中,一些参数的含义如下:

  • START WITH:起始值,默认为 1;
  • INCREMENT BY:序列的递增值,默认为 1;
  • MINVALUE:序列的最小值;
  • MAXVALUE:序列的最大值;
  • CYCLE:是否循环,当到达最大值时回到起始值;
  • CACHE:缓存大小,为提高性能而引入的特性,避免频繁获取序列值导致的性能损失;
  • OWNED BY:序列所拥有的表及列,用于序列被删除时检查是否还有表在使用它。
用法示例
创建序列

以创建名称为 empid_seq 的序列为例:

CREATE SEQUENCE empid_seq
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 99999999
    NO CYCLE
    CACHE 10;
使用序列

利用 nextval 函数获取下一个序列值,以及利用 currval 函数获取当前序列值。

INSERT INTO employees (employee_id, first_name, last_name, hire_date)
    VALUES (empid_seq.nextval, 'John', 'Doe', '2021-01-01');

SELECT empid_seq.currval FROM dual;
修改序列

修改序列的语法如下,只需指定要修改的选项即可,不需要重新定义序列。

ALTER SEQUENCE empid_seq
    INCREMENT BY 2
    MAXVALUE 999999999;
删除序列

删除序列的语法如下:

DROP SEQUENCE empid_seq;
总结

序列是一种非常实用的工具,可以提供一个唯一的自增 ID,应用场景非常广泛,对数据库性能的优化也有帮助。在使用时需注意序列的缓存以及被依赖的表和列,避免出现意外情况。