Sequence是一个数据库对象,多个用户可以从中生成唯一的整数,可以使用序列自动生成主键值。
生成序列号时,序列号将递增,独立于事务提交或回滚;
如果两个用户同时递增同一序列,因为序列号是由另一个用户生成的,每个用户获得的序列号可能存在间隙,一个用户永远无法获取另一个用户生成的序列号。一个用户生成序列值后,该用户可以继续访问该值,而不管序列是否由另一个用户递增;
序列号是独立于表生成的,因此同一序列可以用于一个或多个表。个别序列号可能会被跳过,因为事务最终回滚。此外的用户可能不会意识到其他用户也正在从同一序列中绘制。
创建序列
CREATE SEQUENCE name
[ INCREMENT BY increment ]
[ { NOMINVALUE | MINVALUE minvalue } ]
[ { NOMAXVALUE | MAXVALUE maxvalue } ]
[ START WITH start ]
[ CACHE cache | NOCACHE ]
[ CYCLE ]
得到序列
使用 NEXTVAL 和 CURRVAL 对序列进行操作。他们是伪列(pseudocolumn),行为类似于表列,但实际上并不存储在表中。可以从伪列中进行选择,但不能插入、更新或删除它们的值。
Select emp_sequence.nextval
from dual
修改序列
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000 CYCLE
删除序列
DROP SEQUENCE emp_sequence
查询序列
select * from user_sequences
Sequence_Name | 序列名 |
Min_Value | 序列的最小值 |
Max_Value | 序列的最大值 |
Increment_By | 序列值之间的增量 |
Cycle_Flag | 一个标志,一旦达到Max_Value 值,用来表明该值能否再循环回Min_Value 值 |
Order_Flag | 一个标志,用来表明序列号是否按顺序生成 |
Cache_Size | 内存中缓存的序列项的编号 |
Last_Number | 使用的或缓存的最后一个序列号,一般大于缓冲区中的最后一个值。Last_Number 列在普通的数据库操作过程中不被更新,它在数据库的重新启动/恢复操作中使用。 |
ALL_SEQUENCES | 视图列出了用户拥有的所有序列,或授权该用户或PUBLIC 所有用户访问的序列。由于ALL_SEQUENCES 视图包含多个用户的项,因此除已经列出的列外,它还包含一个Sequence_Owner 列 |
DBA_SEQUENCES | 视图列出了数据库的全部序列,它与ALL_SEQUENCES 视图具有相同的列定义 |
参考资料:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6015.htm
https://www.cnblogs.com/sunice/p/10020953.html
https://www.alibabacloud.com/help/zh/doc-detail/135406.htm