19-Oracle入门之序列

基本概念

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

  • 自动提供唯一的数值
  • 共享对象
  • 主要用于提供主键值
  • 将序列值装入内存可以提高访问效率

    放在内存中速度快

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;

序列需要注意的问题

  • 多个表共用一个序列,造成序列不连续
  • 回滚会造成,造成序列不连续
  • 系统异常,内存序列丢失,造成序列不连续

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...