1、什么是序列?
①类似于MySQL中的auto_increment自动增长机制,但oracle中无auto_increment机制。
②是oracle提供的一个产生唯一数值型值的机制。
③通常用于表的主键值。
④序列又能保证唯一,不能保证连续。声明:在oracle中,只有rownum永远保持从1开始,且继续。
⑤序列值,可放于内存,取之较快。
2、为什么要用序列?
①以前我们为主键设值,需要人工设值,容易错。
②以前每张表的主键值,是独立的,不能共享。
3、创建序列:、
格式:
CREATE SEQUENCE 序列名
[INCREMENTBY1]
[STARTWITH1]
[{MAXVALUE |NOMAXVALUE}]
[{MINVALUEn | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE | NOCACHE 20 }];
说明:
INCREMENT BY:指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
STARTWITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
例:创建序列:
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
4、NEXTVAL 和CURRVAL 伪列:
lNEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
lCURRVAL 中存放序列的当前值
lNEXTVAL应在 CURRVAL之前使用,二者应同时有效。
具体使用:select 序列名.nextval from dual;
select 序列名.currval from dual;
5、更改序列命令
注意:
(1)必须是序列的拥有者或对序列有 ALTER权限
(2)只有将来的序列值会被改变
(3)改变序列的初始值(start with)只能通过删除序列之后重建序列的方法实现
ALTERSEQUENCE[user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE]
[MINVALUE n |NOMINVALUE];
修改序列可以:
1) 修改未来序列值的增量。
2) 设置或撤消最小值或最大值。
3) 转变缓冲序列的数目。
4) 指定序列号是否是有序。
6、删除序列命令
DROP SEQUENCE[user.]sequence_name;
从数据库中删除一序列。
7、注意:序列在下列情况下出现裂缝:
①回滚
②系统异常
③多个表同时使用同一序列