oracle-序列

序列

1、【序列】和【视图】一样,并不占用实际的存储空间,只是在数据字典中保存它的定义信息;当用户在自己的模式中创建【序列】时,用户必须具备CREATE_SEQUENCE系统权限;

2、语法:
CREATE sequence seq_name
[Start with n]
[increment by n]
[minvalue n|nominvalue]
[maxvalue n|nomaxvalue]
[cache n]
[cycle|nocycle]
[order|noorder]

说明:
① seq_name:序列名;
② Start with:指定序列的开始值默认情况下,递增序列的起始值为minvlue,递减序列的起始值为maxvalue;
③ Increment:表示序列的增量,一个正数将产生递增的序列,一个负数将产生一个递减的序列;默认增量是1;
④ minvalue:序列的最小值;
⑤ maxvalue:序列的最大值;
⑥ cache:是否为系列号预缓存,并存储在内存中;
⑦ cycle:循环,当序列达到最大值或最小值时,是否复位并继续;Nocycle表示在序列的最大值或者最小值之后,序列再增加将返回一个错误;
⑧ order:保证生成的序列按照顺序产生;Noorder只保证序列值的唯一性,不保证顺序;

3、举例:
create sequence seq_demo
start with 1
increment by 1
minvalue 0
maxvalue 999999
cache 10
cycle
order;

4、伪序列号:NEXTVAL()和CURRENVAL()
NEXTVAL():返回下一个序列值;
CURRENVAL():返回当前序列值;

5、为表中的记录添加序列值(可以当做自增长用)
Insert into table scott.book(BookID,bookname) values(seq_name.nextval(),’小红’);

6、查询当前系列号
Select seq_name.currenval from dual;

7、管理序列
SCOTT用户模式下,修改序列seq_name,序列的增量为50,缓存为50;
alter sequence seq_name
Increment by 50
Cache 50;
这里插一句题外话,什么时候用alter,什么时候用update;如果修改的是表结构等系统,结构性的,用alter;如果修改的是具体的数据,则用update;

8、查看结构信息
DESC seq_name;

9、删除序列
Drop sequence seq_name;
这里再插一句题外话,什么时候用drop,什么时候用delete;如果是表结构等系统性,结构性的,用drop;如果是删除具体的数据,则用delete;

你可能感兴趣的:(【基础】,【Oracle】)