Oracle序列

本文详细介绍了Oracle数据库中的序列概念,如何创建序列(包括默认值和约束),在表中使用序列作为默认值,以及序列的修改和删除操作。涵盖了序列的创建命令、SQLDeveloper工具的使用,以及序列在自动增长约束中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、前引:

序列可以在Access这个软件中体现。


自动增加(约束)

自动编号类型,oracle中没有这种类型,但是12c开始就有了自动增长(约束)

从12c才有的自动增长约束,和序列是差不多样子的。


创建表时添加自动增长约束

create table student(sid number(3) generated by default as identity,sname varchar(10));

默认从1开始,每一个记录自动增长1

Generated by default as identity表示:默认身份标识。


注意⚠️:
generated by default as identity必须用在数值类型的字段上。
而且一般情况下定义在主键上或者定义在主键的一部分上,是一般情况下。


说明: 在自动增长约束字段下,我们也可以手动插入,自动增长的数值我们可以随便设置,当我们设置完之后,再次插入数据的时候,自动增长的数值会从原本自动增长到的值继续往上加1.

默认情况下,oracle数据表中自增的初始值是1,每新增一条记录,字段值会自动加1.
一个数据表只能有一个字段使用自增约束
可以设置初始值和步长值



例:Create table 表名(字段名1 数据类型 generated by default as identity(start with n increment by m),字段名2 数据类型……)

generated by default as identity(start with n increment by m)表示的是从n开始,每次自动增长m。

可以把身份列设置为主键
Create table 表名(字段名1 数据类型 generated by default as identity primary key,字段名2 数据类型……)
设置为主键后,不允许重复
可以省略by default,此时不允许手动插入数据

2、序列的概念

是数据库对象。
用于产生一系列唯一的数字值
序列号的生成独立于表
同一序列生成器可用于一个或多个表
经常用来产生主键值

序列是一个文件可以用到很多表中。

3、创建序列

命令创建序列

使用CREATE SEQUENCE语句创建序列

创建最简单的序列:
CREATE SEQUENCE 序列名。

创建带有条件的序列:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];


increase by n:自动增长,不写默认是1.
start witn n:开始值,不写默认是1.
maxvalue:最大值,不写默认没有值
minvalue:最小值。
cycle:循环,到达最大值后再从头开始增长。
nocycle:不循环。
cache:缓存;用于提高效率,默认缓存值是20.
nocache:没有缓存。


注意:主键不能写循环。

创建序列:
create sequence dept_seq incerment by 10 start with 50 maxvalue 100 nocache nocycle;

sql developer页面创建序列

周期就是循环,顺序是按照时间分配,不用管。

4、查看序列

查看视图:
desc user_sequences;
查看序列:
select sequence_name,min_value,max_value,cache_size from user_sequences;
在这里插入图片描述


后两行没有创建索引为什么有索引?
因为创建自动增长约束相当于自动创建序列

5、使用序列

NEXTVAL 与 CURRVAL伪列

NEXTVAL返回下一个有效的序列值,每执行一次会返回一个新的数值。
CURRVAL但会当前的序列值。


创建序列:
create sequence myseq;
使用序列:
select myseq.currval from dual;

提示:myseq.currval尚未在此会话中定义。
这是因为创建完序列后要先nextval才能使指针指向第一个记录。
故需要先
select myseq.nextval from dual;

select myseq.currval from dual;

创建表时,指定默认值为序列值

创建表时,指定默认值为序列值:
create table ss(sid number default myseq.nextval,sname varchar2(10));
insert into ss(sname) values(‘v’);
select * from ss;


序列值不会因为创建新表而从1开始,所以序列可以应用到多个表中。
序列值永远不会出现重复值。

修改表时指定默认值为序列值

alter table student modify sid number default seq_1.nextval;

通过插入记录使用序列

insert into dept values(dept_seq.nextval,’ MARKETING ‘,SHANDONG’);

修改、删除都可以使用序列值:


一般序列使用在创建表与插入记录上。

6、修改序列

可以修改增量值,最大值,最小值,循环选项,缓存选项.

SQL> ALTER SEQUENCE dept_deptno
	  INCREMENT BY 1
	  MAXVALUE 999999
	  NOCACHE
	  NOCYCLE;

Sequence altered.

不能修改初始值。

7、删除序列

使用 DROP SEQUENCE 语句删除序列.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小Meng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值