数据库的序列
目录
一、序列是什么
二、序列的用途
二、创建序列
三、查看、修改、删除序列
四、使用序列
(1)在插入语句中使用
(2)不在插入语句中使用
五、使用序列的例子
一、序列是什么
数据库对象分为:用户、视图、索引、触发器、存储过程、序列、图表 (Diagram)、规则 (Rule)、表、缺省值 (Default),序列是其中之一。
1个序列可以生成大量唯一数字,可以把它理解为一个唯一数字生成器
二、序列的用途
主要用于实现oracle的自增长:
mysql建表时可以在给主键添加auto increment实现自增长,但是oracle没有提供自增长的机制,只有通过“序列+触发器”实现主键自增长
二、创建序列
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下的一个虚拟表
五、使用序列的例子
通过触发器实现oracle数据库中student表的主键自增长
第一步:建表
create table student(
int sid not null primary key,
varchar name not null
)
第二步:创建序列
-- 起始值为1,步长为1,没有最大值
CREATE SEQUENCE seq_student
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
第二步:创建触发器
create or replace trigger student_trg
before insert on studnet
for each row
begin
select
seq_student
.nextval into :new.sid from dual;end;