📅  最后修改于: 2023-12-03 14:47:36.756000             🧑  作者: Mango
在 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,应用场景非常广泛,对数据库性能的优化也有帮助。在使用时需注意序列的缓存以及被依赖的表和列,避免出现意外情况。