Oracle之Sequence(序列)
来源:互联网 发布:淘宝宝贝发布尺码 编辑:程序博客网 时间:2024/05/21 06:39
(一)序列概念
序列: 是oacle提供的用于产生一系列唯一数字的数据库对象。
l 自动提供唯一的数值
l 共享对象
l 主要用于提供主键值
l 将序列值装入内存可以提高访问效率
(二序列用法)
创建序列:
1、 要有创建序列的权限 create sequence 或 create any sequence
2、 创建序列的语法
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}];//分配并存入到内存中
3、序列的属性
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1
Cycle cache 2;
//先nextval 后 currval
Select seqEmp.nextval from dual;
Select seqEmp.currval from dual;
Cache<max-min/increment
//解释
{
Create 创建
Sequence 序列 seqEmop 序列名称
Increment by 步长
Start with 1 开始值
Maxvalue 最大值
Minvalue 最小值
Cycle 循环 nocycle 不循环
Cache 缓存 Cache<maxvalue-minvalue/increment by//一般不采用缓存
Nextvalue 下一个
Currval 当前值
}
(三)使用实例
//实现id的自动递增
//第一步
create table cdpt(
id number(6),
name varchar2(30),
constraint pk_id primary key(id)
);
Create sequence seq_cdpt
Increment by 1
Start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache
insert into cdpt values(seq_cdpt.nextval,’feffefe’);
commit;
select * from cdpt;
在使用序列插入数据时,序列总是从2开始的原因:oracle从11.2.0.1版本开始,提供了一个延迟段创建特性
即:当我们创建了新的表和序列,在插入数据时,序列会跳过第一个值。因此,插入数据序列从2开始,而不是从1开始。
解决方法:
第一种方法:将数据库的“延迟段创建”特性设为false(需要相应权限才可以)
alter system set deferred_segment_creation=false;
第二种方法:在建表时让segment立即执行
create table stu(id int , name varchar2(10)) segment creation immediate;
(四)裂缝问题
/使用序列
会产生裂缝
l 序列在下列情况下出现裂缝:
• 回滚
• 系统异常
>多个表同时使用同一序列
//修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
(五)修改删除序列
alter SEQUENCE sequence //创建序列名称
[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 删除之后,序列不能再次被引用
Alter sequence seqEmp maxvalue 5;
Select seqEmp.nextval from dual;
- Oracle之Sequence(序列)
- 【Oracle学习】之 序列(Sequence)
- oracle-序列(SEQUENCE)-
- oracle-序列(SEQUENCE)
- oracle-序列(SEQUENCE)
- oracle 序列(sequence)
- Oracle Database之序列(Sequence)
- Oracle序列(sequence)详解
- 【Oracle 基础】序列(Sequence)
- [Oracle] 浅谈Sequence(序列)
- 【Oracle 基础】序列(Sequence)
- ORACLE(SEQUENCE)序列总结
- Oracle(15)序列sequence
- Oracle序列的(Sequence)使用
- Oracle序列的(Sequence)使用
- Oracle序列的(Sequence)使用
- 关于Oracle的序列(Sequence)使用
- Oracle——22序列(sequence)
- 【PostgreSQL-9.6.3】触发器实例
- mac pch文件位置配置
- C++的动态内存分配
- 添加自定义按键
- IAR 设置问题
- Oracle之Sequence(序列)
- SQL语句面试题目:一般查询和高级子查询
- 【PostgreSQL-9.6.3】触发器概述(普通触发器)
- EFM32片内外设---USART2
- Echarts图表在手机端和PC端使用不同的参数展示
- Spring mvc + mybatis+maven集成swagger ui自动生成api文档
- 1287:3n+1中文版
- Java开发中的23种设计模式详解
- 查询计算机上线时间