利用序列产生主键值(创建序列用于自增长)。
序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。 序列创建之后整个数据库可以共享这个序列。默认自增长的最大值为10的28次方。
序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。 序列创建之后整个数据库可以共享这个序列。默认自增长的最大值为10的28次方。
--创建序列语法:
CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
--创建案例:
--创建sequence
create sequence seq_on_test
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
--建表 :
drop table test;
create table test(
ID integer ,
stu_name varchar2(4)
);
--插入数据 :
insert into test values(seq_on_test.nextval,'A');
insert into test values(seq_on_test.nextval,'B');
--seq的两个方法 :
select seq_on_test.currval from dual;
select seq_on_test.nextval from dual;
--nextval 返回序列中下一个有效的值,任何用户都可以引用
--currval 中存放序列的当前值
-- nextval 应在 currval 之前指定 ,二者应同时有效
--修改序列
//修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
alter SEQUENCE sequenceName //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
修改序列的注意事项:
l 必须是序列的拥有者或对序列有 ALTER 权限
l 只有将来的序列值会被改变
l 改变序列的初始值只能通过删除序列之后重建序列的方法实现
--删除序列:
l 使用DROP SEQUENCE 语句删除序列
l 删除之后,序列不能再次被引用
-- 使用触发器实现ID递增
-- 创建序列
CREATE SEQUENCE auto;
-- persons_tri 触发器名字
-- person 表名
-- AUTO.nextval AUTO表示刚刚创建的序列
-- personid 表示自增的字段
CREATE TRIGGER persons_tri
BEFORE INSERT ON person
FOR EACH ROW
DECLARE
BEGIN
SELECT AUTO.nextval
INTO :NEW.personid
FROM dual;
END;