Oracle数据库之序列详解

序列是Oracle数据库中特有的一个对象,用来生成一组等间隔的数值。

在Oracle中通常会使用序列生成一些唯一值(不重复的值),用来充当主键ID。

一个普遍被遵循的最佳实践是不要使用任何业务逻辑字段作为主键。主键应该是一个对用户和商业逻辑无意义的数据,这将非常方便地进行数据库的迁移、融合、架构调整,或者适应需求规则的一些改变。

最简单的创建序列的语法:

create sequence 序列名;

这样创建出来的序列,值默认从1开始,步长step为1。

取出的值:1、2、3、4、5、6、7、8、9、10……

创建一个从2开始,步长为2,最大值为40的序列:

create sequence 序列名
start with 2
increment by 2
maxvalue 40;

取出的值:2、4、6、8、10、12、14、16……

需要设置序列的属性,可以在创建序列的语句中,有选择地添加如下内容:

属性 作用
INCREMENT BY n 步长为n,每次增长n个大小
START_WITH n 从n开始
MAXVALUE n 最大值为n,超出了之后则无法继续获取数值
NOMAXVALUE 没有上限,没有最大值
MINVALUE n 最小值为n
NOMINVALUE 没有最小值
CYCLE 循环,到了最大值之后会从头开始取。
NOCYCLE 不循环,取完最大值之后就无法继续获取。
CACHE n 在缓存里面放n个值
NOCACHE 不使用缓存

删除序列:

drop sequence 序列名;

针对一个创建好的序列,我们主要的操作就是从它上面取值。

  • nextval 函数

    返回序列中的下一个值。

    nextval会引起序列的自增,每次调用获取的结果都不相同。

  • currval 函数

    返回序列中当前的值。

    不会引起序列的自增,每次调用的结果都相同。

注意:一个序列刚创建好的时候,第一次不能调用currval函数,因为还没有取过第一个值,没有被初始化。

假设,现在需要向s_student表中插入一些学生信息,使用序列自动生成id值。

学生信息:

tom 22岁 男

jack 23岁 男

lucy 24岁 女

首先,专门为这张表的ID字段创建一个序列:

create sequence stu_id_seq start with 1 increment by 1;
insert into s_student(id,name,age,gender) values(stu_id_seq.nextval,'tom',22,'male');
insert into s_student(id,name,age,gender) values(stu_id_seq.nextval,'jack',23,'male');
insert into s_student(id,name,age,gender) values(stu_id_seq.nextval,'lucy',24,'female');
insert into s_student(id,name,age,gender) values(stu_id_seq.nextval,'lily',22,'female');

猜你喜欢

转载自blog.csdn.net/WziH_CSDN/article/details/109387342