Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97198
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2017-02-07 17:04
个人简介

不积跬步无以至千里,每天进步一点点~

文章分类

全部博文(35)

文章存档

2018年(3)

2017年(32)

我的朋友

分类: Oracle

2017-12-11 17:32:32


1.序列的作用及创建
许多的数据库之中都会为用户提供一种自动增长列的操作,
例如:在微软的access数据库中就提供了一种自动编号的增长列。
序列可以自动的按照即定的规则实现数据的编号操作。
但是在oracle中没有提供这样的自动增长列,都是手工替代。
序列的创建语法:序列属于oracle的对象,所以对象的创建依然是create
create sequence 序列名称
  [increment by 步长]
  [start with 开始值]
  [maxvalue 最大值|nomaxvalue]
  [minvalue 最小值|nominvalue]
  [cycle|nocycle]
  [cache缓存大小|nocache];
  范例:创建序列(默认序列最小值是1,最大值无限大)
  create sequence myseq;
 查询数据字典--user_sequences
  select * from user_sequences;
  使用序列:
  要使用一个已创建完成的序列,则可以使用序列中提供的两个伪列进行操作:
  序列名称.currval:表示取得当前序列已经增长的结果,重复调用多次后序列内容
  不会有任何变化,同时当前序列的大小(last_number)不会变化;
  序列名称.nextval:表示取得一个序列的下一个增长值,每调用一次,序列都会自动增长;
  
  注意:对于给出的伪列,一定要先使用nextval,而后才可以使用currval,也就是只有在执行了
  nextval之后序列才真正进入到可用状态。
  范例:观察伪列的使用
    select myseq.nextval from dual;
    select myseq.currval from dual;
    
序列的最终目的是生成自动增长列,这个情况就必须结合表去使用;
范例:创建数据表
drop table member purge;
create table member(
id number,
name varchar2(50) not null,
constraint pk_id primary key(id)
)
插入数据:
insert into member (id,name)values(myseq.nextval,'King');
2.删除序列
drop sequence 序列名;
3.创建特殊功能的序列
范例:设置新的步长为3
drop sequence myseq;
create sequence myseq increment by 3;
select myseq.nextval from dual;
 范例:修改默认初始值
 drop sequence myseq;
create sequence myseq start with 30;
select myseq.nextval from dual;
范例:设置缓存
drop sequence myseq;
create sequence myseq 
cache 100;
select * from user_sequences;
 范例:创建循环序列,让序列内容在1,3,5,7,9之间循环
 drop sequence myseq;
 create sequence myseq
 start with 1
 increment by 2
 maxvalue 10
 minvalue 1
 cycle 
 cache 3;
 select myseq.nextval from dual;
 
 4.修改序列
 序列本身也属于一个数据库对象,而只要是数据库的对象,那么在创建之后都可以对其进行修改,
 语法如下:
 alter sequence 序列名称
  [increment by 步长]
  [maxvalue 最大值|nomaxvalue]
  [minvalue 最小值|nominvalue]
  [cycle|nocycle]
  [cache缓存大小|nocache];


5.自动序列
从oracle 12C起,为了方便用户生成数据表的流水编号,所以提供了类似与db2或mysql那样的
自动增长列,而这中国自动增长列实际上也是一个序列,只是这个序列对象的定义由oracle自己
控制的。
oracle的自动增长序列,需要在定义列的时候进行设置,而设置的语法如下
create table 表名称(
列名称 类型  generated by default as identity(
  [increment by 步长]
  [start with 开始值]
  [maxvalue 最大值|nomaxvalue]
  [minvalue 最小值|nominvalue]
  [cycle|nocycle]
  [cache缓存大小|nocache]),
列名称 类型...
)
使用自动增长列
drop table member purge;
create table member(
id number generated by default as identity(start with 1 increment by 1),
name varchar2(50) not null,
constraint pk_id primary key(id)
)
 自动的序列在表彻底删除之后会自动回收。
阅读(1192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~