目录
一、序列是什么,有啥用
二、创建序列
三、查看、修改、删除序列
四、使用序列
(1)在插入语句中使用
(2)不在插入语句中使用
五、序列的实用案例——每插入1条记录就自动填充订单号(非主键列)
一、序列是什么,有啥用
1个序列是数据库生成1个对象,这个对象可以生成大量唯一数字,可以把它理解为一个唯一数字生成器。
序列生成的唯一数字,可以用来作为没设置自增长表的主键的值、不是主键但要求唯一的列(比如订单号)的值
二、创建序列
create sequence 序列名
increment by 3 -- 每次加3个(如果是-3就是每次减3)
nomaxvalue -- 不设置最大值
【maxvalue 99 -- 设置最大值为99】
【minvalue 1 -- 设置最小值为1】
start with 1 -- 从1开始计数 //如果不指定,默认从minvalue开始递增,从maxvalue递减
NOCYCLE -- 不循环,一直累加
CACHE 10; --在内存中预先创建10个序列,需要用到就先直接从缓存取,减少时间(数字越大性能越好,但占用内存也越大)
order -- 产生的序列值有顺序,比如:第1个序列值是1,第二个2.....
【noorder】 --无序
三、查看、修改、删除序列
查看:desc 序列名
修改:
alter sequence 序列名
maxvalue 200
cache 3;
重命名:rename 旧序列名 to 新序列名;
删除:drop sequence 序列名
四、使用序列
(1)在插入语句中使用
伪列:CURRVAL返回当前(第1次用必须先NEXTVAL生成)序列号、NEXTVAL生成并返回下一个(一个新的)序列号
create sequence student_seq nomaxvalue start with 1 NOCYCLE order;
insert into sutdent(sid,name) values(student_seq.NEXTVAL,‘王五’);
(2)不在插入语句中使用
select student_seq.NEXTVAL from dual; //dual表是系统数据库sys下的一个虚拟表
五、序列的实用案例——每插入1条记录就自动填充订单号(非主键列)
通过触发器实现
第一步:创建序列
第二步:创建触发器
create or replace trigger 触发器名字
before insert on 订单表名
for each row
begin
select 序列名.nextval into :new.订单号列名 from dual;
end;