Oracle序列
2015-11-26 11:38
381 查看
Oracle序列
序列(sequence)介绍
oracle中,是通过使用序列(sequence)来处理自动增长列。(1)可以为表中的列自动产生值。
(2)由用户创建数据库对象,并可由多个用户共享。
(3)一般用于主键或唯一列。
PS:在SQL Server,MySQL中都是用非常简单的一条语句来实现自增长的,没有像在Oracle中这样定义成一个对象--序列(sequence)来进行使用。定义成对象的好处就是方便管理,效率更高。
创建序列基本语法:
create sequence 序列名称start with 开始数字
increment by 增长数字
minvalue 最小值
maxvalue 最大值 | nomaxvalue 无穷大
cycle | nocycle
cache | nocache
详细说明:
start with 开始数字à从几开始increment by 增长à步长,每次增长几个数
minvalue 最小值
maxvalue 最大值à可以不设置,不设置应写为nomaxvalue,也就是无穷大
cycle 循环,也就是说增长到最大值后,再从最小值开始重新增长 nocycle 不循环,也就是说增长到最大值后就停止增长
nocache 不设缓存,cache设置缓存,设置缓存的优点是提高效率,但是缺点就是当出现意外中断时,缓存中没有使用的序列数字将被舍弃
实例:
--创建一个序列 create sequence myseq1 start with 1 --初始值 increment by 1 --自增值 minvalue 1 --最小值 maxvalue 30000 --最大值 cycle --循环 nocache --不缓存 --创建表 create table test1 ( id number primary key, name varchar2(30) ); --使用序列 insert into test1 values(myseq1.nextval,'a'); insert into test1 values(myseq1.nextval,'a'); insert into test1 values(myseq1.nextval,'a'); select * from test1; --查看序列到多少号了 select myseq1.currval from dual;
特别说明:
1、myseq1:表示序列的名字,nextval:关键字,表示从序列中取下一个值。
2、sequence序列是需要配合number类型的列来使用;
3、sequence序列是要在主键或unique列上使用的。
4、第一次使用nextval返回的是初始值;随后的nextval会自动增加你定义的increment by值,然后返回增加后的值;
5、currval总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。
6、使用一次nextval会增加一次sequence的值,所以如果你在同一个语句里面使用多个nextval,其值就是不一样的。
7、如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取效率更高。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shotdown abort),cache中的sequence就会丢失,所以可以在create sequence的时候用nocache防止这种情况。
使用sequence的情况
不包含子查询、snapshot/view的select的语句insert语句的子查询中
insert语句的values中
update的set中
如:update 表名 列值=序列名.nextval where 条件;
在sqlserver和mysql中都可以在定义表的时候,直接给指定自增长。
sqlserver中设置自增长
create table 表名(id int primary key identity(1,1),name varchar(32));
mysql中设置自增长
create table 表名(id int primary key auto_increment,name varchar(32));
----------参考《韩顺平玩转Oracle》
相关文章推荐
- Oracle维护数据完整性——约束
- 63 Which three components does the Scheduler use for managing tasks within the Oracle environment? (
- oracle存储过程常用技巧
- Oracle查询用户所有表
- 51 You have not configured Oracle Managed Files (OMF) in your database. You do not want to scan the
- oracle 定时任务(DBMS_JOB)
- 本人对Oracle Work In Process模块的一些了解
- 用PowerDesigner逆向从Oracle导出pdm
- 关于Oracle VM VirtualBox接入局域网
- oracle表空间使用率查询
- Oracle数据文件/控制文件/日志文件
- oracle执行计划sql
- 关于navicat for oracle 无法连接oracle11g的解决办法
- oracle数据库字符集的修改
- [Rman]Oracle 11g控制文件延迟自动备份
- 解决Maven不能下载“oracle、aspectjweaver、com.springsource.net.sf.cglib”jar
- Oracle的number(p,s)
- Linux下oracle开机自启动设置
- expdp / impdp 用法详解
- 判断一个数据是否存在于一个表中,Oracle中写自定义函数