关于序列
序列是生成唯一整数值的结构,并且每个会话所获取到的序列值都是唯一的。唯一值是序列的最组要目的,主要的应用场景是生成记录的主键。
用序列生成主键最大的优势在于其性能。生成序列与表、行锁机制、及提交或回滚过程无关,所以生成序列的速度是非常快的。
序列的值全局唯一,例如有10个会话分别往order表插入数据,order表的主键是序列,那么每个会话获取到序列值在表里都是唯一的,而不是每个会话里唯一。
重启序列唯一的方法是删除它并重新创建它。
创建序列
CREATE SEQUENCE SEQL
其中seql是序列的名称。创建序列的参数如下:
参数名称 | 说明 |
---|---|
INCREMENT BY | 下一个数值应该比上一个数值大(或者小)多少,默认是1,如果是降序数列则为-1 |
START WITH | 序列的起始点:第一个选项发出的数值,默认值是1,但是可以是任何值 |
MAXVALUE | 升序序列生成错误或返回到START WITH 值之前能达到的最大值,默认无最大值 |
MINVALUE | 降序序列生成错误或返回到START WITH 值之前能达到的最小值,默认无最小值 |
CYCLE | 当达到最大值或者最小值时的行为,默认是抛出一个错误,如果指定CYCLE,则序列会返回到起点重复并重复 |
CACYE | ORACLE预先成批的生成多少个序列,默认值是20 |
ORDER | 只与集群数据库有关,强制集群中的所有实例协同递增序列 |
修改序列
ALTER SEQUENCE 序列名 参数名 参数值
例如:以下语句将修改序列ORDER_SEQ的CACHE为1000
ALTER SEQUENCE ORDER_SEQ CACHE 1000;
序列的知识卡片
- 对于一个设置了序列的表,如果要执行insert,则用户不仅要具备表的读写权限,还要有序列的权限