本文详细讲一下 序列(Sequence) 在 SQL 中的概念和使用方法。
1. 什么是序列(Sequence)?
序列是数据库中一种 独立于表的对象,它可以生成一系列 连续、唯一的数字,常用于生成主键值或其他需要唯一编号的场景。
特点包括:
- 唯一性:每次生成的值都不会重复(除非手动重置)。
- 自动递增或递减:可以指定步长(increment)。
- 独立性:序列不依赖具体的表,可以被多个表共享。
简单理解:序列就像数据库中的“流水号生成器”。
2. 序列的创建
在 Oracle 中,创建序列的语法如下:
CREATE SEQUENCE 序列名
START WITH 1 -- 起始值
INCREMENT BY 1 -- 每次增加值
MINVALUE 1 -- 最小值
MAXVALUE 99999 -- 最大值
CACHE 20 -- 缓存数量,提高性能
NOCYCLE; -- 达到最大值是否循环
示例:
CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOCYCLE;
这个序列每次生成一个递增的整数,从 1 开始,不循环。
3. 获取序列值
序列有两个常用伪列:
NEXTVAL
:获取下一个序列值,同时序列值增加。CURRVAL
:获取当前序列值(必须先调用过NEXTVAL
)。
-- 获取下一个序列值
SELECT emp_seq.NEXTVAL FROM dual;
-- 获取当前序列值
SELECT emp_seq.CURRVAL FROM dual;
注意:
dual
是 Oracle 中的一个虚拟表,用于 SELECT 表达式。
4. 在表中使用序列
常用于插入数据时自动生成主键:
INSERT INTO employees (emp_id, emp_name)
VALUES (emp_seq.NEXTVAL, '张三');
每次插入,emp_id
会自动使用序列生成的唯一值。
5. 序列的其他操作
- 修改序列(如步长、缓存):
ALTER SEQUENCE emp_seq
INCREMENT BY 5;
- 删除序列:
DROP SEQUENCE emp_seq;
✅ 总结:
- 序列是生成唯一数字的工具,非常适合主键或流水号。
NEXTVAL
获取下一个值,CURRVAL
获取当前值。- 序列独立于表,灵活可复用。