Oracle序列
来源:互联网 发布:韩国软件ins下载 编辑:程序博客网 时间:2024/06/10 13:17
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 myseq1start 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序列
- oracle 序列
- oracle序列
- oracle 序列
- Oracle序列
- Oracle序列
- Oracle 序列
- oracle 序列
- oracle序列
- oracle序列
- Oracle序列
- Oracle 序列
- oracle序列
- oracle 序列
- oracle序列
- Oracle序列
- Oracle-序列
- oracle 序列
- 模板元编程 第三章课后练习(非答案)
- 实用链接
- error at ::0 can't find referenced pointcut anyMethod
- Java 下一代: 对比并发性
- 学习Struts2_0500_actionMethod_DMI
- Oracle序列
- DOS 的历史
- JavaScript中的标签语句
- 通过force index了解的MySQL查询的性能优化
- Objective-C开发编码规范
- 创业必备工具
- 4.0读取文件的报 open failed: ENOENT (No such file or directory)
- OpenStack与监控系统
- android 动画