什么是序列?
序列就是生成顺序递增/递减的一串数字。
序列作用
用来实现自动的提供唯一的主键值(下面会示范)
创建一个序列:
create sequence 序列名
[start with n]
[increment by n]
[minvalue n|nominvalue]
[maxvalue n|nomaxvalue]
[cache n]
[cycle|nocycle]
[order|noorder];
带有[]说明可以省略
start with n,指定序列的起始值。默认情况下,递增序列则默认值为minvalue,递减序列则默认为maxvalue。
increment by n,如果是正数为递增序列,如果是为负数则为递减序列。默认每次增加1。
minvalue n,序列生成的最小值。
maxvalue n,序列生成的最大值。
cache,是否序列号预分配,并存到内存中。
cycle,当序列达到最大值/最小值时,可以复位继续下去。nocycle,当序列达到最大值/最小值,当序列继续增加时,会报错。
order,保证生成的序列值按顺序产生,noorder保证生产的序列值不重复,不保证产生值的顺序性。
序列的使用
student表
在创建时把sno设置为了主键
SQL> select * from student;
SNO SNAME SSEX SAGE SDEPT
---------- ---------------------------------------- -------- ---------- ----------------------------------------
1 张波 男 18 软件工程
2 李增福 男 21 预防医学
3 安霞 女 21 临床医学
4 贺建 女 20 应用数学
5 杨鹏飞 男 20 应用数学
创建的序列
SQL> create sequence student_sequence
2 start with 6
3 order;
序列已创建。
在student表中插入一个数据
SQL> insert into student values(student_sequence.nextval,'李宇航','男',22,'口腔医学');
已创建 1 行。
查看student中的数据
SQL> select * from student;
SNO SNAME SSEX SAGE SDEPT
---------- ---------------------------------------- -------- ---------- ----------------------------------------
6 李宇航 男 22 口腔医学
1 张波 男 18 软件工程
2 李增福 男 21 预防医学
3 安霞 女 21 临床医学
4 贺建 女 20 应用数学
5 杨鹏飞 男 20 应用数学
已选择6行。
在插入一条数据
SQL> insert into student values(student_sequence.nextval,'苏小白','男',22,'中医药');
已创建 1 行。
查看student中的数据
SQL> select * from student;
SNO SNAME SSEX SAGE SDEPT
---------- ---------------------------------------- -------- ---------- ----------------------------------------
6 李宇航 男 22 口腔医学
7 苏小白 男 22 中医药
1 张波 男 18 软件工程
2 李增福 男 21 预防医学
3 安霞 女 21 临床医学
4 贺建 女 20 应用数学
5 杨鹏飞 男 20 应用数学
已选择7行。
查看当前序列号
select 序列名.currval from dual;
这可以查到当前序列前一个已经使用的序列号
SQL> select student_sequence.currval from dual;
CURRVAL
----------
7
修改序列
alter sequence 序列名
maxvalue 1000;
修改除了start with 不可以修改其他都可进行修改。
删除序列
drop squence 序列名;
SQL> drop sequence student_sequence;
序列已删除。