您的位置:首页 > 数据库 > Oracle

19-Oracle入门之序列

2017-01-08 15:56 399 查看

基本概念

序列: 可供多个用户用来产生唯一数值的数据库对象

自动提供唯一的数值

共享对象

主要用于提供主键值

将序列值装入内存可以提高访问效率

放在内存中速度快

auto_increment
[ 1 , 2, 3, 4......20 ]
▲


CREATE SEQUENCE 语句

定义序列:

CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];


创建序列

创建序列 DEPT_DEPTID_SEQ为表 DEPARTMENTS 提供主键

不使用 CYCLE 选项

CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
Sequence created.


create sequence myseq;


查询序列

查询数据字典视图 USER_SEQUENCES 获取序列定义信息

SELECT  sequence_name, min_value, max_value,
increment_by, last_number
FROM    user_sequences;


如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值

NEXTVAL 和 CURRVAL 伪列

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

CURRVAL 中存放序列的当前值

NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

应用:

INSERT INTO departments(department_id,
department_name, location_id)
VALUES      (dept_deptid_seq.NEXTVAL,
'Support', 2500);
1 row created.


序列 DEPT_DEPTID_SEQ 的当前值

SELECT  dept_deptid_seq.CURRVAL
FROM    dual;


使用序列

将序列值装入内存可提高访问效率

序列在下列情况下出现裂缝:

回滚

系统异常

多个表同时使用同一序列

如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值

修改序列

修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
Sequence altered.


注意事项

必须是序列的拥有者或对序列有 ALTER 权限

只有将来的序列值会被改变

改变序列的初始值只能通过删除序列之后重建序列的方法实现

删除序列

使用DROP SEQUENCE 语句删除序列

删除之后,序列不能再次被引用

DROP SEQUENCE dept_deptid_seq;
Sequence dropped.


综合实例

创建序列

create sequence myseq;


创建表

create table tableA
(
tid number,
tname varchar2(40)
);


从序列中取nextval,产生tableA的主键值

insert into tableA values(myseq1.nextval, 'aa');


序列的两个属性 NEXTVAL CURRVAL nextval应在currval之前被指定:

SQL> select myseq.currval from dual;
select myseq.currval from dual
*
第 1 行出现错误:
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义


select myseq.nextval from dual
select myseq.currval from dual


删除序列

drop sequence  myseq;


序列需要注意的问题

多个表共用一个序列,造成序列不连续

回滚会造成,造成序列不连续

系统异常,内存序列丢失,造成序列不连续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 对象 内存