序列概念
序列
是用于生成唯一
、连续序号
的对象
。
序列
可以是升序
的,也可以是降序
的。
使用CREATE SEQUENCE
语句创建序列
。
sql
start with 1 指定第一个序号从1开始
increment by 1 指定序号之间的间隔为1
increment by -1 降序1000 999 998这样
maxvalue 2000 表示序列的最大值为2000
minvalue 1 序列的最小值为1
NOCYCLE 达到2000以后就报错比如2001
CYCLE 达到2000以后跳到1
CACHE 10 指定内存中预先分配的序号数
create sequence stu_seq
start with 1
increment by 1
maxvalue 2000
minvalue 1
nocycle
cache 10;

查看用户包含角色权限
dba
全局(所有用户) usr
用户本身
sql
create user t1 identified by t1;
grant resource,connect to t1;
conn t1/t1
SQL> select * from user_role_privs;
CONNECT
RESOURCE
SQL> select * from role_sys_privs;
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
CONNECT CREATE SESSION NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO
9 rows selected
resource 角色包含 CREATE SEQUENCE
创建序列
sql
conn t1/t1
create sequence stu_seq
start with 1
increment by 1
maxvalue 2000
minvalue 1
nocycle
cache 10;
#查看用户拥有的序列
select * from user_sequences;

cache含义
sql
1 2 3 4 5 ... 2000
第一种:1 生成发给用户 2 生成发给用户
第二种:1 生成发给用户 但是 2 3 4 5 6 生成以后全部放到内存中
第二种的好处就是不用再次计算,直接从内存发给用户。
默认的cache是多少?
sql
create sequence seq2 start with 1 increment by 1;

默认的cache是
20
!
访问序列
通过序列
的伪列
来访问序列
的值
NEXTVAL返回序列
的下一个值
。
CURRVAL 返回序列
的当前值
。
第一次
使用序列
中的值的
时候,要使用NEXTVAL
。
sql
conn t1/t1
select stu_seq.nextval from dual;
select stu_seq.currval from dual;
#接着访问该序列的话,值就是一直递增的!
select stu_seq.nextval from dual;

sql
create table student(sno number(4),sname varchar(2));
insert into student values(stu_seq.nextval,'A');
insert into student values(stu_seq.nextval,'B');
insert into student values(stu_seq.nextval,'C');

高级用法
sql
|| 是字符串连接
tochar() 是把数字转字符
insert into student values('2025_'||tochar(stu_seq.nextval),'C');
更改和删除序列
sql
#不能更改序列的START WITH参数
alter sequence stu_seq maxvalue 5000 cycle;
#删除序列
drop sequence stu_seq;