Sequence:序列是一个数据对象,可以用来生成唯一的整数。是数据库里独立的对象,不依赖任何表,为oracle所特有。用来自动生成主键值,可以用sequence的地方:inert语句的子查询中,update的set等。创建序列
:Create sequence seqname
—increament by 1//每次增长1
—start with 1//从1开始增长
—maxvalue 100//最大值是100,nomaxvalue:不设最大值
—nocycle//一直累加没有循环
—nocache//没有缓冲
—省略所有的选项,那么默认是从1开始增,每次增1
序列的最大值是38位整数,起始值不可以小于最小值
重点说明:
- cache参数是为了应对并发访问的,它告诉oracle预先分配一个sequence
number集合,并且保存在内存中,以便可以快速访问。这个内存的大小由cache决定,当多个用户同时访问一个sequence的时候,是在
oracle的SGA中读取sequence当前的合理数值,如果并发访问太大,但cache的大小不过,就会产生sequence
cache的相关等待,影响系统性能,简单说 就是缓存。 - 使用cache还可能会跳号;比如数据库突然不正常shut
down,cache中的sequence就会丢失,可以再创建序列的时候加上nocache来避免。 - SGA:系统全局区,是一组包含一个oracle实例的数据和控制信息的共享内存结构,主要是用于存储数据库信息的内存区。
- sequence的使用:
1.nextval:增加sequence的值然后返回sequence值,如果cache,就取cache下一个可用的值;否则取出sequence下一个可用的值。
Create table tablename(
Id number primary key,
Name varchar2
);
Insert into tablename values(seqname.nextval,’xiaoming’);
查询当前序列:select seqname.nextval from dual;
2.currval:当前连接最后一次使用序列的值,即:当前序列的值,在第一次nextval初始化之后才能使用,否则报错,select
seqname.currval from dual;
3.修改序列:Alter sequence
seqname[increament
by][maxval][minval][cycle][cache],注意序列的起始值不可以改变,如果要改,必须先drop掉序列。
4.删除序列Drop
sequence seqname;
注:mysql里的auto_increament类似sequence,
Create table tab2(
Id number not null auto_increment,
Primary key(id)
)
oracle的sequence序列,布布扣,bubuko.com