Oracle序列(基础操作)

序列概念

序列是用于生成唯一连续序号对象

序列可以是升序的,也可以是降序的。

使用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;
相关推荐
ClouGence1 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
荣--2 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森3 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
飞将4 小时前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Avan_菜菜19 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
Nturmoils1 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
Sokach10151 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
渣波1 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
AlfredZhao2 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone