序列——Sequence

2018-11-03  本文已影响0人  梦遇缱绻的馥郁

7.1About Sequencess(关于序列)

序列是数据库对象的一种。
多个用户能够通过序列来生成连续的数字以此来实现主键字段的“自己主动”和“唯一增长”。而且一个序列可为多列、多表同一时刻使用。

序列消除了串行化而且提高了应用程序一致性。

7.2Creating Sequences(创建序列)

在system模式下创建序列需要拥有create sequence 权限。
在其他用户模式下创建序列则需要create any sequence权限。——语法为:Syntax 。
--假设不加条件语句,默认创建的序列格式例如下:

create sequence SEQ_T
minvalue 1
maxvalue 9999999999999
start with 1
increment by 1
cache;

语义Semantics:
INCREMENT BY :指定序列增长步长。
能够为正、负整数分别对应升序、降序。但不能为0——(序列不重复)
最高精度28.

START WITH :指定序列起始数。
MAXVALUE:指定序列最大值。最大28位。必须大于等于起始值且大于等于序列最小值。
MINVALUE:指定序列最小值。
NOMAXVALUE:无最大值(实际为10^27或-1)。default
NOMINVALUE:无最小值(实际为-10^27或1)。default
CYCLE:指定序列达到最大值或最小值后继续从头开始生成。
NOCYCLE:指定不循环生成。default
CACHE:指定数据库内存中预分配的序列值的个数,以便告诉获取。最小cache值为2.
最大值为:(CEIL(MAXVALUE-MINVALUE))/ABS(INCREMENT)
注:假设系统发生问题。全部缓存的没有被DML语句使用并提交的序列将会丢失。潜在丢失值数量等于cache指定的预先内存分配序列值个数。
NOCACHE:不指定缓存数,默认为20.
ORDER:指定order条件保证序列按请求顺序生成。
此条件适用于RAC和环境。
NOORDER:不保证序列按请求顺序生成。

CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE
--创建名为customers_seq的序列,起始值1000,步长为1,没有缓存数量即内存中预分配的序列值个数为20,不循环生成。

注:带有cycle条件的序列当达到最大值时,下一个值会从最小值minvalue开始循环。

7.3 ALTER SEQUENCE(改动序列)

改动system模式的序列需要alter object权限。
改动其他模式序列需要alter any sequence权限。

1.假设想要以与现存不同数字又一次开始序列;则必须删除重建。

alter sequence seq_t start with 2;
alter sequence seq_t start with 2 * ERROR at line 1:ORA-02283:cannot alter starting sequencenumber

2.改动的maxvalue必须大于序列当前值。

alter sequence seq_t maxvalue 1;  --error

7.4DROP SEQUENCE(删除序列)

删除序列不许要有drop any sequence 权限。

DROP SEQUENCE oe.customers_seq;

7.5 NEXTVAL and CURRVAL :

nextval的值是每调用一次就增加一次;currval的值调用时,还是和自身会话的当前值一样。
上一篇下一篇

猜你喜欢

热点阅读